2016-08-23 156 views
0

有没有一种方法来覆盖单击中性按钮或负按钮时不会自动解除警报对话框的行为。防止AlertDialog自动关闭NeutralButton点击???

final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setCancelable(false); 
    builder.setTitle("Title"); 
    builder.setPositiveButton("Done", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      // do something and close dialog 
     } 
    }); 
    builder.setNeutralButton("Clear All", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      // do something but not close dialog   
     } 
    }); 
    builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int which, boolean isChecked) { 
      if(isChecked){ 
      // do something 
      } else { 
      // do something else 
      } 
     } 
    }); 
    final AlertDialog dialog = builder.create(); 
    dialog.show(); 

这里负号按钮的预期的行为是:上点击“全部清除”它应该只是清除这一切并不会自动关闭对话框的选择?但Android alertDialog自动关闭对话框,点击NegativeButtonNeutralButton。任何方式覆盖此行为

+0

试试这个http://stackoverflow.com/questions/32323605/how-do-i-control-on-multichoice-alertdialog –

回答

0

所以我能够与添加dialog.setOnShowListener() dialog.create后实现这个()和dialog.show()之前

builder.setNeutralButton("Clear All", null); 
    builder.setOnShowListener(new DialogInterface.OnShowListener() { 

     @Override 
     public void onShow(DialogInterface dialog) { 

      Button clearAll = builder.getButton(AlertDialog.BUTTON_NEUTRAL); 
      clearAll.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        // do something but don't dismiss 
         for(int which=0; which<checkedItems.length; which++){ 
         ((AlertDialog) dialog).getListView().setItemChecked(which, false); 
        } 
       } 
      }); 
     } 
    }); 

环解决了一个问题,问题:点击清除所有,警报对话框中的复选框UI不会改变。因此,运行最后一个循环来更改UI,使所有复选框不被选中。

+0

试试这个http://stackoverflow.com/questions/32323605/how-do-i -control-on-multichoice-alertdialog –

+0

我做了一个循环,我能够改变所有选中项目的状态。 – zero