Java 设计模式不适用于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

我正在尝试为我的所有对话框开发一个抽象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
 }
}
当我单击该按钮时,该控件根本不会转到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内?是的,断点位于方法内的语句上