2011-12-29 8 views
2

私のアプリケーションでは、ボタンをクリックすると警告ダイアログが表示されます。アラートダイアログは、複数選択項目と2つのボタン(OkとCancel)で構成されています。最初は配列を使用していくつかの項目を設定しました(つまり、コードではchoice_checked)。android - アラートダイアログのステータスのマルチチョイス項目を更新する方法

  1. あなたはいくつかの変更をした警告ダイアログを開き、閉じ、再び警告ダイアログを開く]ダイアログ[OK]ボタンをクリックした場合、それは変更(警告ダイアログのすなわち、このデフォルトのプロパティ)を示しています。

  2. 警告ダイアログを開くと、いくつかの変更が加えられ、キャンセルボタンがクリックされた後、ダイアログが閉じられ、警告ダイアログが再度表示されます。この場合、以前のステータスのみを表示します(変更を表示しません) .iは試みましたが、私は体を助けてくれません。

  3. コードでは、choice_checkedとchoice_checked_dynamicは論理配列です.choice_checked_dynamicはchoice_checkedの複製です。これらの2つの配列は最初は同じです。リストに変更を加えてOKボタンをクリックすると、変更された配列が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

は、ボタン初めてでclcik場合、ダイアログはonCreateDialog()を使用して一度だけ作成されますです。 Next time onwardsダイアログが開き、変更は適用されません。だから私はこのケースの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

単に代わりショー()を使用するダイアログを表示するようにし、最後に作成したダイアログを返しません)( Methodeのを作成します。

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) { 

} 
関連する問題