Java 设计模式不适用于OnClickListener
我正在尝试为我的所有对话框开发一个抽象OnClickListener调用程序Java 设计模式不适用于OnClickListener,java,android,design-patterns,Java,Android,Design Patterns,我正在尝试为我的所有对话框开发一个抽象OnClickListener调用程序 public abstract class A { public void handleError() { if (dialogs != null && activity != null) { final String mNoxMessages[] = God.getMnoxMessage((Context) activity, response); ((Act
public abstract class A {
public void handleError() {
if (dialogs != null && activity != null) {
final String mNoxMessages[] = God.getMnoxMessage((Context) activity, response);
((Activity) activity).runOnUiThread(new Thread
(new Runnable() {
public void run() {
dialogs.showDialogForMessage("title", "description",
"ok", "cancel",
new View.OnClickListener() {
@Override
public void onClick(View view) {
//breakpoint location here never reaches
performDialogOkAction(response);
dialogs.clearAll();
}
},
new View.OnClickListener() {
@Override
public void onClick(View view) {
//breakpoint location here never reaches
performDialogCancelAction(response);
dialogs.clearAll();
}
}
}));
);}
}
public abstract void performDialogOkAction(Object errorCode);
public abstract void performDialogCancelAction(Object errorCode);
}
public void showDialogForMessage(String title, String description,
String okButtonText, String cancelButtonText,
View.OnClickListener okOnClick,
View.OnClickListener cancelOnClick) {
ok = informationDialog.findViewById(R.id.information_ok);
cancel = informationDialog.findViewById(R.id.information_cancel);
ok.setText(okButtonText);
cancel.setText(cancelButtonText);
ok.setOnClickListener(okOnClick);
cancel.setOnClickListener(cancelOnClick);
}
public class B extends A {
@Override
public void performDialogOkAction(Object errorCode) {
//breakpoint location here never reaches
}
}
当我单击该按钮时,该控件根本不会转到PerformDialogoAction方法
我在这里遗漏了什么?代码不起作用的原因是从未调用handleError。这里有两个选项: 用构造函数A替换handleError 调用B的构造函数中的handleError 发现了问题 我在我的主要活动中调用它,阻止任何对话框执行任何操作
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
getDialogs().clearAll();
getDialogs().dimissSnackBar() ;
}
return super.dispatchTouchEvent(ev);
}
一旦我对上面的代码进行了注释,我就能够获得onClick事件。dialogs是什么类型的对象?dialogs.ShowDialogFormMessage被调用,甚至SetOnClick Listener也被调用。添加了两个位置,断点没有到达onClick内部,这就是根本原因。我猜,否决是因为缺少一个。例如,您没有显示在何处或如何使用B,或者informationDialog是什么,或者它是在何处创建和显示的,或者A如何访问响应,即使它没有在任何地方声明,等等。老实说,在其当前形式中,此设计似乎有点复杂。您是否考虑过将Dialog或DialogFragment子类化并在那里处理所有这些问题?不,调用handleError时,我将设置一个断点来检查。。这不是问题所在..断点是否在performDialogOkAction内?是的,断点位于方法内的语句上