Android听众是某种设计模式吗?

时间:2014-10-22 16:52:03

标签: java android design-patterns

当我使用android时,我必须使用监听器进行点击......等等

如:

Button button = new Button(getActivity());

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // do somthing
    }
});

然而,今天我发现了一些新的东西!我学会了如何创建一个需要来自Google的Dialogs |的听众的课程Android开发者API指南:

public static class DatePickerDialog extends DialogFragment {

    interface HijriDatePickerDialogListener {
        public void onDialogPositiveClick(DialogFragment dialog);

        public void onDialogNegativeClick(DialogFragment dialog);
    }

    HijriDatePickerDialogListener mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        try {
            mListener = (HijriDatePickerDialogListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement HijriDatePickerDialogListener");
        }

    }
}

我想了解更多关于这种模式的信息,我想知道它叫什么?

3 个答案:

答案 0 :(得分:4)

这是一种称为观察者模式的模式。您可以在此处详细了解观察者模式:http://en.wikipedia.org/wiki/Observer_pattern

本书给出了设计模式的一个很好的解释:http://en.wikipedia.org/wiki/Design_Patterns(通常称为“四人帮”设计模式的书)。

答案 1 :(得分:2)

您的代码的第一个示例是事件侦听器/观察者,但不要将其与第二个混淆。

至于第二种情况,我不确定你从哪里得到代码,但是编写它的人通过使用“监听器”这个词引用什么是“回调”接口来混淆问题。仅因为它中包含“Listener”一词并不意味着它与Android中常见的事件监听器相同。

您在第二个示例中处理的是一个'回调'界面,旨在与Activity所附加的任何Fragment一起使用。

获取该代码并进行调整,您可以简单地执行以下操作,因为“回调”接口方法将直接在您的代码中调用...

public static class DatePickerDialog extends DialogFragment {

    interface HijriDatePickerDialogCallbacks {
        public void dialogPositiveHasBeenClicked(DialogFragment dialog);
        public void dialogNegativeHasBeenClicked(DialogFragment dialog);
    }

    HijriDatePickerDialogCallback mCallbacks;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        try {
            mCallbacks = (HijriDatePickerDialogCallbacks) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement HijriDatePickerDialogCallbacks");
        }

    }
}

使用“回调”界面是使用Fragments时Android的标准设计模式,需要与他们所附加的Activity进行通信。

请注意,我从您的代码中删除了“侦听器”一词,而是替换了“回调”。当您的Activity创建Fragment时,Fragment会分配对mCallBacks的引用,并且能够通过Activity实施的回调方法直接与Activity进行通信{1}}。

答案 2 :(得分:1)

是的,他们是Observer模式,或者是这种模式的专业化。但是我在博客中找到了关于Android有用的设计模式,他们提到Adapter Pattern是一个单独的东西。