当我使用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");
}
}
}
我想了解更多关于这种模式的信息,我想知道它叫什么?
答案 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是一个单独的东西。