2012-09-04 23 views
0

我有一個alertDialog,它提示用戶做出多個選擇,我能夠做出幾個選擇並將選定的項目保存在arrayList中,但是當我再次觸發該alertBox時,它會被重置,並且所有複選框都是unchecked,我希望它們保留我留下他們的狀態,直到我手動重置它們。這個怎麼用? 我的代碼:在multiChoiceItems警報對話框中加載先前的值?

ArrayList<String> participants = db.getNames(); 
      final String[] arr = participants.toArray(new String[participants 
        .size()]); 
      boolean[] checkedItems = new boolean[participants.size()]; 
      final ArrayList<String> selectedParticipants = new ArrayList<String>(); 

      AlertDialog.Builder b = new AlertDialog.Builder(this); 
      b.setTitle("Select the participants:"); 
      b.setMultiChoiceItems(arr, checkedItems, 
        new DialogInterface.OnMultiChoiceClickListener() { 

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

          if (isChecked) { 

           selectedParticipants.add(arr[which].toString()); 
          } 
         } 
        }); 
      b.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        Toast.makeText(EnterExpense.this, 
          "" + selectedParticipants, Toast.LENGTH_SHORT) 
          .show(); 

       } 
      }).setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          // TODO Auto-generated method stub 

         } 
        }); 
+0

您也可以將它們存儲在SharedPreferences文件中。如果你想。 – pixelscreen

回答

0

你上面的代碼不僅是正確的,但是你錯過了只有一件事是更新內部boolean [] checkedItems數組列表中選中的項目。一旦用戶選擇所有參與者獲得所選參與者的位置,並將所有這些位置的真實值添加到chekedItems列表中,並且剩餘的項目在完成後將其視爲假,它肯定會起作用!!

您可以使用getCheckedItemIds()getCheckedItemPositions()從列表視圖中獲取選中項目的列表。您應該首先使用AlertDialog.getListView()來獲取對話框的列表視圖。

b.getListView().getCheckedItemPositions(); 
+0

你可以用代碼解釋嗎?我第一次使用這種方法,並不知道如何去做你所說的。 –

+0

我已編輯我的答案,現在檢查... –

+0

我沒有使用任何listView –