2011-12-29 25 views
2

在我的應用程序中,如果單擊按鈕,我會顯示警報對話框。警報對話框由多個選項和2個按鈕組成(即Ok和Cancel)。最初,我使用數組設置了一些項目(即,在代碼choice_checked中)。android - 如何更新警報對話框的多選項目狀態

  1. 如果你打開你做了一些改變,然後點擊確定按鈕,然後對話框駁回並再次打開警告對話框警告對話框就說明更改(即,這個默認的警告對話框的屬性)。

  2. 如果你打開警報對話框,你做了一些改變,點擊取消按鈕,然後再次打開警報對話框,在這種情況下,我只想顯示以前的狀態(不顯示更改) 。我試過但我沒有得到請任何機構可以幫助我。

  3. 在代碼中,choice_checked和choice_checked_dynamic是布爾型arrays.choice_checked_dynamic是choice_checked的副本。意思最初這兩個陣列是相同的。如果您在列表中進行了一些更改並單擊確定按鈕,則更改後的數組將被複制到choice_checked_dynamic中。默認情況下,警報對話框僅顯示更改,因此OK按鈕可以正常顯示。但在取消按鈕的情況下,意味着如果你做了一些改變,然後點擊取消按鈕,然後我想顯示choice_checked_dynamic狀態(意味着我顯示以前的狀態)。

我試過但我沒有得到請任何人都可以幫助我。

代碼:

private OnClickListener bookmark_btnListener = new OnClickListener() 

{ 

    public void onClick(View v) 
    { 
     try 
     {         
      showDialog(DIALOG_MULTI_CHOICE); 
     } 
     catch(Exception ex2) 
     { 
      System.out.println("back btn error:"+ex2.toString()); 
     } 
    } 
}; 

protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DIALOG_MULTI_CHOICE:           
     bookmark_dialog = new AlertDialog.Builder(this); 
     bookmark_dialog.setTitle("Bookmarking for"); 
     bookmark_dialog.setMultiChoiceItems(choice, choice_checked, new OnMultiChoiceClickListener() { 
      public void onClick(DialogInterface dialog, int index, boolean status) 
      {       

      }     
     }); 

     bookmark_dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) 
      {     
       for(int i=0;i<choice_checked.length;i++) 
      { 
       choice_checked_dynamic[i] = choice_checked[i];    
      } 
       dialog.dismiss(); 
      } 
     }); 
     bookmark_dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) 
      { 
       for(int i=0;i<choice_checked_dynamic.length;i++) 
       { 
        choice_checked[i] = choice_checked_dynamic[i];    
       }    
       dialog.dismiss(); 
      } 
     }); 
     return bookmark_dialog.create();   
    } 
    return null; 
} 

回答

0

在上面的代碼的問題是,對話框將只使用一次onCreateDialog(),如果你clcik按鈕第一次被創建。下次開始時,對話框將打開,不會應用更改。所以我不推薦這種情況下的onCreateDialog()。在這裏,我爲每個按鈕點擊創建對話框並顯示它。

// Code: 
AlertDialog.Builder bookmark_dialog_obj; 

private OnClickListener bookmark_btnListener = new OnClickListener() 
{ 

    public void onClick(View v) 
    { 
     try 
    {         
     Bookmark_Dialog(RB_UpcomingRestaurantDetails.this); 
    } 
    catch(Exception ex2) 
    { 
     System.out.println("back btn error:"+ex2.toString()); 
    } 
} 


public void Bookmark_Dialog(Context context) 
{ 

    System.out.println("onCreate Choice_Checked:"+Arrays.toString(choice_checked));         
    bookmark_dialog_obj = new AlertDialog.Builder(context); 
    bookmark_dialog_obj.setTitle("Bookmarking for"); 
    bookmark_dialog_obj.setMultiChoiceItems(choice, choice_checked, new OnMultiChoiceClickListener() { 
     public void onClick(DialogInterface dialog, int index, boolean status) 
     {      

     }     
    }); 

    bookmark_dialog_obj.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) 
     {      
      for(int i=0;i<choice_checked.length;i++) 
      { 
       choice_checked_dynamic[i] = choice_checked[i];    
      }    
     } 
    }); 
    bookmark_dialog_obj.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) 
     { 
      for(int i=0;i<choice_checked_dynamic.length;i++) 
      { 
       choice_checked[i] = choice_checked_dynamic[i];    
      }  
      System.out.println("onCreate Cancel Choice_Checked:"+Arrays.toString(choice_checked)); 
     } 
    }); 
    bookmark_dialog_obj.show();   
} 
0

只需使用秀()代替創建()梅索德顯示對話框,並在年底不會返回創建對話框。

dialog.show(); 
return null; 

活動做對話therfore不薩瓦狀態辭退不工作,但按下按鈕,自行解散multichoise對話框或者您可以使用deleteDialog(INT ID)。

0

我認爲以下方法將滿足您的要求。

protected void showMultipleChoiceItems(final String[] items, 
     final boolean[] selections, String title, 
     boolean cancelButtonDisabled) { 

    Builder alertDialogBuilder = new Builder(this); 
    alertDialogBuilder.setTitle(title); 

    alertDialogBuilder.setMultiChoiceItems(items, selections, 
      new OnMultiChoiceClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which, 
         boolean isChecked) { 
        selections[which] = isChecked; 

       } 
      }); 

    alertDialogBuilder.setNeutralButton(
      "OK", new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 

       } 
      }); 

    if (cancelButtonDisabled) 
     alertDialogBuilder.setCancelable(false); 
    else 
     alertDialogBuilder.setNegativeButton(
       "Cancel", null); 

    final AlertDialog alertDialog = alertDialogBuilder.create(); 
    alertDialog.show(); 

    final Button btnOk = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL); 
    btnOk.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      alertDialog.dismiss(); 
      onMultiSelect(items, selections);    

     } 
    }); 
} 

// Override this method in the activity to define action on making multiple 
// selections 
public void onMultiSelect(String[] items, boolean[] selections) { 

}