在 HarmonyOS 中,Java 代码环境下你仍然可以使用传统的匿名内部类。这里有一个详细示例,展示了如何在 HarmonyOS 中实现匿名内部类。


示例代码

1. 使用匿名内部类处理按钮点击事件


import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.window.service.WindowManager;

public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        setUIContent(ResourceTable.Layout_ability_main);

        Button myButton = (Button) findComponentById(ResourceTable.Id_my_button);
        myButton.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                // 按钮点击事件处理逻辑
                showToast("Button clicked!");
            }
        });
    }

    private void showToast(String message) {
        // 显示提示信息
        getUITaskDispatcher().asyncDispatch(() -> {
            new ToastDialog(getContext())
                    .setText(message)
                    .setAlignment(LayoutAlignment.CENTER)
                    .show();
        });
    }
}

在这个示例中,我们创建了一个按钮点击事件的匿名内部类 new Component.ClickedListener() 来处理按钮的点击事件。


解释

setUIContent(ResourceTable.Layout_ability_main):将布局文件 ability_main 设置为当前页面的内容。

findComponentById(ResourceTable.Id_my_button):从布局中找到 ID 为 my_button 的按钮组件。

setClickedListener(new Component.ClickedListener() {...}):为按钮设置点击事件监听器,通过匿名内部类来实现点击事件回调。

2. 使用匿名内部类执行任务

匿名内部类不仅可以用于事件监听,还可以用于执行其他异步任务,如在 HarmonyOS 中运行后台任务。


示例代码(执行异步任务)


import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Text;
import ohos.agp.window.service.WindowManager;
import ohos.app.dispatcher.TaskDispatcher;
import ohos.app.dispatcher.task.TaskPriority;

public class MainAbility extends Ability {
    private Text statusText;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        setUIContent(ResourceTable.Layout_ability_main);

        statusText = (Text) findComponentById(ResourceTable.Id_status_text);

        // 执行异步任务
        TaskDispatcher globalTaskDispatcher = getGlobalTaskDispatcher(TaskPriority.DEFAULT);
        globalTaskDispatcher.asyncDispatch(new Runnable() {
            @Override
            public void run() {
                // 模拟耗时任务
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                // 更新UI
                getUITaskDispatcher().syncDispatch(new Runnable() {
                    @Override
                    public void run() {
                        statusText.setText("Task completed!");
                    }
                });
            }
        });
    }
}

在这个示例中,我们使用匿名内部类 new Runnable() {...} 来执行异步任务,并更新 UI。


总结

通过 Java 的匿名内部类,你可以轻松在 HarmonyOS 中实现各种事件处理和任务执行。

以上两个示例分别展示了如何使用匿名内部类处理按钮点击事件和执行异步任务。