为什么我不能在对话框视图中为按钮设置onClickListener?

时间:2011-07-07 14:28:22

标签: android android-layout android-emulator android-widget android-manifest

我有一个自定义对话框,如下所述。

我的自定义对话框布局( * my_dialog.xml * )仅包含“关闭”按钮:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"

     >

         <Button
            android:id="@+id/dismiss_btn"
            android:layout_width="100dip"
            android:layout_height="30dip"
            android:layout_centerHorizontal="true"
            android:text="Dismiss me"
            android:textSize="8dip"
            android:textColor="#ffffff"
             />
     </RelativeLayout>

我的对话框视图类:

 public class MyDialog extends Dialog{

        public MyDialog(Context context){
            super(context);
        }


        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.my_dialog);

                 Button dismissMeBtn = (Button)findViewById(R.id.dismiss_btn);

                /** ERROR Message when set onClickListener below (throw by eclipse editor)**/

               //     The method setOnClickListener(View.OnClickListener) in the 
                //    type View is not applicable for the arguments (new DialogInterface.OnClickListener(){})

                dismissMeBtn.setOnClickListener(new OnClickListener() { 
                    @Override
                    public void onClick(View v) {
                         MyDialog.this.dismiss(); 
                    }
                  });

            getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        }


    }

如上面的代码所示,我在对话框中有一个“ * dismiss_btn * ”按钮,我想在按下“关闭”按钮时关闭对话框但是我的错误解析按钮的 setOnClickListener 时的代码(如代码所示)。

错误消息(eclipse编辑器抛出错误):

类型View中的方法setOnClickListener(View.OnClickListener)不适用于参数(new DialogInterface.OnClickListener(){})

为什么我收到错误?为什么我不能在对话框视图中为按钮设置onClickListener?

3 个答案:

答案 0 :(得分:27)

因为eclipse认为它是DialogInterface onClickListener但你需要一个View onClickListener所以它将是

                dismissMeBtn.setOnClickListener(new View.OnClickListener() { 
                @Override
                public void onClick(View v) {
                     MyDialog.this.dismiss(); 
                }
              });

答案 1 :(得分:1)

这是因为您处于DialogInterface的上下文中,并且它自己具有OnClickListener接口。

您的代码应为:

dismissMeBtn.setOnClickListener(new View.OnClickListener() { 
    @Override
    public void onClick(View v) {
         MyDialog.this.dismiss(); 
    }
});

答案 2 :(得分:0)

您的导入似乎有问题。 当您尝试创建新的OnClickListener时,您正在调用DialogInterface.OnClickListener的构造函数,该构造函数不是Button所需的OnClickListener(可能是由于import android.content.DialogInterface.OnClickListener

尝试使用new View.OnclickListener(){ ... }或用import android.view.View.OnClickListener替换导入,它应该是alritght。