自定义对话框上的按钮不响应单击事件

时间:2010-10-12 12:45:15

标签: android

我创建了一个扩展Dialog的自定义对话框。对话框上的一个按钮是“OK”按钮,当完成在其他字段中输入信息时,用户应该按下该按钮。我无法让任何听众设置为触发该按钮。

public class HeightDialog extends Dialog {

   private Button okButton;

   …

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.heightdialog);

      this.okButton = (Button)this.findViewById(R.id.userOkWithHeight);

      this.okButton.setOnClickListener(new android.view.View.OnClickListener() {
         public void onClick(View v) {
            // Does not fire
            HeightDialog.this.dismiss();
            return;
         }
      });

      this.okButton.setOnLongClickListener(new OnLongClickListener() {
         public boolean onLongClick(View v) {
            // Does not fire
            HeightDialog.this.dismiss();
            return true;
         }
      });

     this.okButton.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
           // Does not fire
           HeightDialog.this.dismiss();
           return true;
        }
     });

   …
}

我还尝试了一种实现,其中Dialog类实现了侦听器(http://www.androidcompetencycenter.com/2009/01/android-basics-dialogs-and-floating-activities/),而不是使用内部类(http ://about-android.blogspot.com/2010/02/create-custom-dialog.html): 仍然没有运气。

public class HeightDialog extends Dialog implements View.OnClickListener {

   private Button okButton;

   …

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.heightdialog);

      this.okButton = (Button)this.findViewById(R.id.userOkWithHeight);

      this.okButton.setOnClickListener(this);


   public void onClick(View view){
      HeightDialog.this.dismiss();
      return;
   }       
   …
}

我在两个版本的实现中都在每个侦听器中设置了断点,并且调试器永远不会停止执行。我试图为没有解决问题的侦听器使用内部类。

任何线索? 感谢

4 个答案:

答案 0 :(得分:2)

我在这里找到了一个解决方案: Handling buttons in custom dialogs

它适用于我的情况。

答案 1 :(得分:2)

dialog = new Dialog(this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");


Button dialog_btn = (Button) dialog.findViewById(R.id.dialog_button);
dialog_btn.setOnClickListener(new View.OnClickListener() 
{
    // Perform button logic
}

答案 2 :(得分:1)

为什么我不确定为什么按照我的帖子中提到的两个例子不起作用,我想出了如何让它发挥作用。我必须从对话框的onCreate()方法中将我的监听器的附件移动到对话框的onStart()方法中的按钮。

这似乎与我有关,也在我的自定义对话框中覆盖了onStart()方法:

   public void onStart() {
      super.onStart();
      setContentView(R.layout.heightdialog);

      ...
   }

该代码必须将我的监听器“归零”在onCreate()方法中。

答案 3 :(得分:0)

为了拦截按钮单击,HeightDialog必须实现View.OnClickListener

public class HeightDialog extends Dialog implements View.OnClickListener
{
}