无法解雇Android中的对话[AlertDialog]

时间:2013-07-13 05:21:47

标签: android dialog alertdialog android-alertdialog

final String[] choices = { "Item 1", "Item 2", "Item 3"};

final AlertDialog dialog= new AlertDialog.Builder(
    TestSubjectCalendar.this)
    .setTitle("Title")
    .setSingleChoiceItems(choices, pos, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss(); //gives error
            // MORE CODE
        }
    }).create();
    dialog.show();

dialog.dismiss()发出以下错误:

  

可能尚未初始化局部变量对话框

我想要的是,当我点击dialog中的选项列表中的某个项目时,dialog应该会消失。那我怎么能这样做呢?

PS:我知道我可以使用setItems()代替setSingleChoiceItems(),但我想使用后者,因为它提供了单选按钮。

3 个答案:

答案 0 :(得分:1)

您需要更改对话框的名称,因为 onClick()中的 AlertDialog DialogInterface 具有相同的名称... < / p>

尝试以下更改并将其签出。

 @Override
 public void onClick(DialogInterface dialog1, int which) {
      dialog1.dismiss(); //gives error
      // MORE CODE
 }

即解决名称覆盖问题,我只需在onClick()中将对话框更改为 dialog1

答案 1 :(得分:0)

试试这个:

 final String[] choices = { "Item 1", "Item 2", "Item 3"};

final AlertDialog.Builder dialog= new AlertDialog.Builder(TestSubjectCalendar.this);

dialog.setTitle("Title")
.setSingleChoiceItems(choices, pos, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss(); //gives error
        // MORE CODE
    }
}).create();
dialog.show();

答案 2 :(得分:0)

基本上,由于您在初始化对话框的同一代码块中引用对话框,Eclipse/Java编译器担心onClick(DialogInterface dialog, int which)中使用的对话框引用可能无效。

因此将其更改为:

    final AlertDialog dialog= new AlertDialog.Builder(
            TestSubjectCalendar.this).create();
            dialog.setTitle("Title");
            dialog.setSingleChoiceItems(choices, pos, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss(); //gives error
                    // MORE CODE
                }
            });
            dialog.show();

应该做的伎俩。另外,我的代码实际上没有任何错误,可能与编译器设置有关。