4

我的应用中有一个按钮,它允许我打开自定义alertdialog。此警报对话框从XML文件获取其内容:我在其中有一个按钮(称为filterButton),单选按钮和滑块。以编程方式添加两个按钮(确定,取消)。
当我打开我的对话框警报时,内容完美显示,但迄今尚未创建任何事件。 (所以没有问题打开alertdialog和显示内容)将监听器添加到自定义alertdialog中的按钮导致崩溃我的应用

现在,我想为我的“filterButton”添加一个侦听器。所以一如既往,我宣布我的按钮(按钮filterButton),setOnClickListener这样(在我的onCreate):

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的按钮的活动时崩溃。当我脱掉这几条线时,它再次起作用。我不明白,它没有任何意义,它只是一个带有监听器的按钮,我有几十个这样的问题,所以为什么它在我的alertdialog中时有问题?

ps:我的logcat像往常一样没用,只是说致命错误和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(); 
    } 
}; 

不同之处在于,现在当我打开活动时它不会崩溃,但是当我点击应该打开alertdialog的按钮时。

+0

在哪一行它给错误。请张贴您的日志猫。 – 2013-03-26 04:11:35

回答

13

你必须从你的对话框的XML文件让您的按钮,这样下面的代码

filterButton = (Button) dialog.findViewById(R.id.filter_button); 
+0

检查我的编辑代码它会解决你的问题.. – 2013-03-26 04:34:26

+1

它的工作!非常感谢 ! =) – Phalanx 2013-03-26 04:40:07

+0

它没有崩溃,但onclick监听器根本没有工作 – TeodorKolev 2016-06-30 08:19:09

3

您必须将Dialog以内的按钮与Dialog对象连接起来。此处为对话框。因此,尝试这样

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

谢谢,我试过了,但它仍然崩溃,我在编辑的第一条消息中放置了更多细节。 – Phalanx 2013-03-26 04:25:43

相关问题