0

作为 android 开发新手,我遇到的困难之一是我的类倾向于在所有内部类等中变得相当广泛,用于 gui 侦听器等。所以我想出了一个解决方案来分解我的类,我想听听周围 android 专家的一些反馈。

举个例子。我不想在同一个类中定义特定活动的所有对话框(该活动中发生了一系列对话框)所以我实现了一个 DialogManager 类来定义和保存所有潜在的对话框,从将此 DialogManager 的 Activity 并使用它来通知 Activity 发生了哪些 gui 事件。

这里是这个DialogManager类的一个片段,mHandler是回调Activity的handler

mDownloadDialog = new ProgressDialog(mContext);

mDownloadDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel",
                new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {                      

                        mDownloadDialog.dismiss();

                        Message message = mHandler.obtainMessage();
                        message.arg1 = DOWNLOAD_DIALOG;
                        message.arg2 = AlertDialog.BUTTON_NEGATIVE;
                        message.sendToTarget();
                    }
                });

所以这很有效,我对现在更有条理的源代码感到满意,但我想知道 Handler 类是否是执行此操作的正确方法,或者这是否有点矫枉过正,并且有一些更好的方法可以实现相同的结果受到推崇的。

编辑:正如博尔德所指出的

处理程序消息不会立即执行

因此,考虑到这一点,使用 Handler 不是正确的方法。

下一个想法就像在给定示例中定义一个接口一样简单

public interface DialogEventReceiverInterface { 
public void dialogEvent(int dialog,int button);
}

在 Activity 中实现该接口,将 Activity 交给 DialogManager 并在发生事件时调用 dialogEvent。现在在我看来非常直接......

4

2 回答 2

1

这可能不是您想要的 100%,但它可能会解决您在使用 Android 应用程序时遇到的问题。

通常我会得到很多内部类监听器,在处理大量 UI 事件时,另一个选项是发布-订阅。您发布事件和对象订阅特定事件的位置。在 Android 中,谷歌有一套他们使用的可爱的库,它们被称为Guava有很多很棒的东西。其中之一就是EventBus让这更容易一些。

http://code.google.com/p/guava-libraries/wiki/EventBusExplained

他们有一些很好的例子,并引导你完成它。这是一个很大的变化,也是一种通过 UI 思考的不同方式,所以我不会在没有调查的情况下直接介入。确保它适合您的项目。

EventBus 很酷,库中有很多很棒的功能Guava

于 2012-09-19T14:15:45.577 回答
1

我很欣赏您不一定要专门询问整理与Dialogs 相关的混乱,而是Dialog您展示的代码只是一个更广泛问题的说明,我认为您正在寻求一种设计模式来解决。

但是,专注于您的 s 的具体示例,Android API 现在已经以s 和特别是 sDialog的形式为此提供了更简洁的解决方案。使用类是一种更简洁的做事方式,因为您通常在单独的类文件中定义您的 s。Android API 文档包含关于如何处理s 和 parent之间通信的非常好的指南。FragmentDialogFragmentFragmentDialogFragmentDialogFragmentActivity

在我切换到使用Fragments 之前,我也最终Dialog在类中创建了很多 sActivity并且我尝试了使用对话框管理器等的各种设计模式。但是,Fragment在我看来,这种方法要干净得多。

与早期 Android 版本的兼容性没有问题,因为您可以使用 V4 支持包。

于 2012-09-19T14:33:36.750 回答