4

我的应用程序中有一个按钮,允许我打开自定义警报对话框。此警报对话框从 XML 文件中获取其内容:我在其中有一个按钮(称为 filterButton)、单选按钮和一个滑块。以编程方式,添加了另外两个按钮(确定、取消)。
当我打开对话框警报时,内容完美显示,但到目前为止没有创建任何事件。(所以打开警报对话框并显示内容没问题)

现在,我想为我的“filterButton”添加一个监听器。因此,与往常一样,我以这种方式(在我的 onCreate 中)声明了我的按钮 (Button filterButton;)、setOnClickListener:

filterButton = (Button) findViewById(R.id.filter_button); 
filterButton.setOnClickListener(filter_listener);

然后我定义我的听众:

OnClickListener filter_listener = new OnClickListener() {

    @Override
    public void onClick(View v) {
//  showPopupMenu(v);
    }  };  

我注释掉了里面的方法,以确保问题不是来自这个方法。因此,既然我这样做了,当我尝试运行我的应用程序时,它就会在我尝试打开打开警报对话框的按钮所在的活动时崩溃。当我取消这几行时,它又可以工作了。我不明白,这没有意义,它只是一个带有侦听器的按钮,我有几十个这样的,没问题,为什么它在我的 alertdialog 中有问题?

ps:我的logcat和往常一样没用,只是说Fatal Error和nullpointerexception,没有细节。

编辑:我按照下面的建议更改为:

filterButton = (Button) alertDialog.findViewById(R.id.filter_button);
filterButton.setOnClickListener(filter_listener);   

我把它放在这里是因为如果把它放在程序的开头,它会在红色下划线 alertDialog ,但它仍然崩溃:

OnClickListener dialog_listener = new OnClickListener() {

    @Override
    public void onClick(View v) {

        LayoutInflater myLayout = LayoutInflater.from(context);
        View dialogView = myLayout.inflate(R.layout.alertdialog_filter, null);

        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                context);


        Bundle bundle = getIntent().getExtras();
        int filterVariable = bundle.getInt("filterVariable");

        alertDialogBuilder.setTitle("Filter Mode");

          alertDialogBuilder.setPositiveButton("OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });


        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });  

        // set alertdialog_filter.xml to alertdialog builder
        alertDialogBuilder.setView(dialogView);

        // create alert dialog
        AlertDialog alertDialog = alertDialogBuilder.create();

        filterButton = (Button) alertDialog.findViewById(R.id.filter_button);
        filterButton.setOnClickListener(filter_listener);



        // show it
        alertDialog.show();
    }
};   

不同的是,现在当我打开活动时它不会崩溃,但是当我单击应该打开警报对话框的按钮时。

4

2 回答 2

13

您必须从对话框 XML 文件中获取按钮,如下面的代码

filterButton = (Button) dialog.findViewById(R.id.filter_button); 
于 2013-03-26T04:11:05.787 回答
3

您必须将必须进入的按钮DialogDialog对象连接起来。这里是对话框。所以试试这样

filterButton = (Button)dialog.findViewById(R.id.filter_button); 
filterButton.setOnClickListener(filter_listener);
于 2013-03-26T04:10:57.957 回答