【发布时间】:2018-08-24 14:09:36
【问题描述】:
我正在尝试为我的所有对话框开发一个抽象的 OnClickListener 调用程序。
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
}
}
当我单击按钮时,控件根本不会转到 performDialogOkAction 方法。
我在这里错过了什么?
【问题讨论】:
-
dialogs是什么对象? -
dialogs.showDialogForMessage 被调用,甚至
setOnClickListener被调用.. -
又增加了2个位置,断点没有到达onClick内部,这是根本原因
-
我猜是因为缺少minimal reproducible example。例如,你没有显示你在哪里或如何使用
B,或者informationDialog是什么,或者它是在哪里创建和显示的,或者A如何访问response,即使它没有在任何地方声明等等。老实说,以目前的形式,这种设计似乎有点令人费解。您是否考虑过继承Dialog或DialogFragment并在那里处理所有这些?
标签: java android design-patterns