如何在警告对话框(android)中保存状态并检查单选按钮的默认值?

时间:2014-08-21 18:44:15

标签: android

我正在使用警告对话框,以便用户可以从android中的列表中选择一个选项。现在我面临的问题是,我不知道如何在启动时检查默认单选按钮,甚至在用户从单选按钮中选择任何选项后我不知道如何保存单选按钮的状态。我正在使用此代码:

private void SingleChoiceWithRadioButton() { 
         final String[] selectFruit= new String[]{"Blacklist","Whitelist"};
         Builder builder = new AlertDialog.Builder(this);  
         builder.setTitle("Single Choice With Radio button");  
         builder.setSingleChoiceItems(selectFruit, -1,  
             new DialogInterface.OnClickListener() {  
               @Override  
               public void onClick(DialogInterface dialog, int which) { 

                 Toast.makeText(callBlockerSettings.this, selectFruit[which]+":"+ which + " Selected", Toast.LENGTH_LONG).show();  
               //  dialog.dismiss();  
               }  
             });  
         builder.setPositiveButton("ok",  
             new DialogInterface.OnClickListener() {  
               @Override  
               public void onClick(DialogInterface dialog, int which) {  
                 dialog.dismiss();  
               }  
             });  
         AlertDialog alert = builder.create();  
         alert.show();  
       } 

2 个答案:

答案 0 :(得分:2)

正如开发人员guide所说  

public AlertDialog.Builder setSingleChoiceItems (int itemsId, int checkedItem, DialogInterface.OnClickListener listener)

Parameters itemsId the resource id of an array i.e. R.array.foo checkedItem specifies which item is checked. If -1 no items are checked. listener notified when an item on the list is clicked. The dialog will not be dismissed when an item is clicked. It will only be dismissed if clicked on a button, if no buttons are supplied it's up to the user to dismiss the dialog.

   public int selectedElement=-1; //global variable to store state
   private AlertDialog alert;
   private void SingleChoiceWithRadioButton() { 
             final String[] selectFruit= new String[]{"Blacklist","Whitelist"};
             Builder builder = new AlertDialog.Builder(this);  
             builder.setTitle("Single Choice With Radio button");  
             builder.setSingleChoiceItems(selectFruit, selectedElement,  
                 new DialogInterface.OnClickListener() {  
                   @Override  
                   public void onClick(DialogInterface dialog, int which) { 
                       selectedElement=which;
                     Toast.makeText(callBlockerSettings.this, selectFruit[which]+":"+ which + " Selected", Toast.LENGTH_LONG).show();  
                   //  dialog.dismiss();  
                   }  
                 });  
             builder.setPositiveButton("ok",  
                 new DialogInterface.OnClickListener() {  
                   @Override  
                   public void onClick(DialogInterface dialog, int which) {  
                     dialog.dismiss();  
                   }  
                 });  
             alert = builder.create();  
             alert.show();  
           } 

//Call this method always

   private void showDialog(){
      if(alert==null)
       SingleChoiceWithRadioButton();
      else
       alert.show();
   }

这里的-1是默认的选定项索引(-1表示不选择任何默认值)。使用此参数设置默认选择。

如果您需要永久存储此值,可以在SharedPreferences中保存此值(selectedElement),然后检索相同值并在活动的onCreate()期间初始化它。

答案 1 :(得分:1)

在您的代码中,使用此方法:

public void onClick(DialogInterface dialog, int which)

您应该保存which值,因为它代表所选的当前值。使用班级成员存储或SharedPreferences,您认为合适。

//Class initialization

int my_previous_selected = -1;

//... code

public void onClick(DialogInterface dialog, int which) { 
  my_previous_selected = which;
    }  
  }); 

如果您想重新打开Dialog保持选中相同的值,则必须使用setSingleChoiceItems秒参数,如下所示:

builder.setSingleChoiceItems(selectFruit, my_prevous_selected,  
         new DialogInterface.OnClickListener() {  

//... code

希望有所帮助