2012-11-24 65 views
3

我在列表視圖中使用複選框,並希望獲取ListView中的選定項。問題是SparseBooleanArray.size()始終保持爲0,即使在該複選框被選中在listView.I尋覓了很多,但問題仍然存在一樣。這是我使用的代碼:獲取SparseBooleanArray.size()從ListView中獲取檢查項時始終爲0

checked = lvShowContacts.getCheckedItemPositions(); 
if(checked != null) 
{ 
    for (int i=0; i<checked.size(); i++) { 
     if (checked.valueAt(i)) { 
      String item = lvShowContacts.getAdapter().getItem(
        checked.keyAt(i)).toString(); 
      Log.v("Message",item + " was selected"); 
     } 
    } 
    Log.v("Message","checked.size() is "+ checked.size()); 
    // else 
    //the item is not checked, do something else 
} 

我在這裏總是讓checked.size()0。請幫助me.Thanks提前。

+0

你用'lvShowContacts.setChoiceMode(CHOICE_MODE_MULTIPLE)'? – Sam

+0

是的,我已經用它 – user1726619

+0

你使用的是什麼行佈局?它是否實現可檢查? – Sam

回答

0

如果要循環所選行

int len = listView.getCount(); 
SparseBooleanArray checked = listView.getCheckedItemPositions(); 
for (int i = 0; i < len; i++) 
if (checked.get(i)) {  
    /* do whatever you want with the checked item */ 
} 

你會發現這個答案在這個線程:How to get Selected items from Multi Select List View

0

對於我來說,checked.size()總是返回0和值出現首先達到12,但具有正確的鍵/值對。所以我只是使用ListView的getCount來獲得迭代的限制,並在遇到IndexOutOfBoudsException時完成。醜陋地獄,但到目前爲止它的工作。

SparseBooleanArray checked = this.list.getCheckedItemPositions(); 
      ArrayList<String> ids = new ArrayList<String>(); 

      try { 
       for (int i = 0; i < this.list.getCount(); i++){ 
        if (checked.valueAt(i)){       
         Object r = this.list.getItemAtPosition(checked.keyAt(i)); 
         ids.add(r.getId());     
        }    
       } 
      } catch (IndexOutOfBoundsException e) { 
       Log.e(TAG, e.getMessage(),e); 
      } 
0

您可以通過將sparsebooleanarray轉換爲toString,然後將其拆分到「,」來獲取sparsebooleanarray的大小。但是讓我告訴你,這不是一個非常值得信賴的方法,從目前爲止我所知道的,起初它只獲取檢查項目,它存儲:{0=true, 1=true, 2=true}但假設你以某種方式保存了它的狀態(使用共享前綴等)和然後取消選中檢查的項目,然後返回, {0=true, 1=true, 2=false},ie, this time the size of the array will be 3 even when true state is only carried by 2. 因此,即使在返回計數時依賴sparsebooleanarray的大小也要小心。

0

使用SparseBooleanArray一些提示:

讓SBA是一個SparseBooleanArray對象。

sba.size()返回數組中的項目總數。 現在,該數組包含一個Integer值到位置的映射,在這種情況下,所選列表視圖項的位置將映射到相應的布爾狀態。 使用sba.keyAt(i)來查找布爾數組的整數值,然後使用sba.get(sba.keyAt(i))來查找映射到整數鍵的相應布爾值。

可以遍歷這樣的數組:

SparseBooleanArray sba= getListView().getCheckedItemPositions(); 
    for(int i=0;i<sba.size();i++){ 
     Log.i("SparseBoolaeanArray","Element "+sba.keyAt(i)+":status::"+sba.get(sba.keyAt(i)));