2012-09-07 48 views
0

我有一個listview包含一個checkedtextview。我的應用程序從列表視圖的頂部移動到底部。我想在調用一個動作之前檢查該項是否被檢查過。如果未選中,我想移至列表中的下一個項目。Android CheckedTextView

E.g.

項目1 - 經過

項目2 - 經過

項目3 - 不經過

第4項 - 經過

所以,我希望應用程序處理如下:

項目1

項目2

項目4.

我不知道如何從listview位置訪問項目的檢查狀態。

,我想的邏輯如下:

Is Current Item checked? 
Yes: 
Call action 
No: 
Move to next item. 
Reloop to top of void. 

我需要有什麼阻止一個無限循環。

回答

0

一個解決方案將使用位置的ArrayList。 當用戶選中/取消選中checkbox時,相應地添加/刪除ArrayList中的位置。 然後,當用戶結束時,只需遍歷列表即可知道選擇了哪個位置。

+0

所以,onclicklistener內,建立檢查項目位置的數組列表?然後,根據該列表測試當前項目的位置。如果它在裏面,請繼續並採取行動?如果不是,我該如何回覆? –

+0

這個問題已問了很多,詳情請看這裏http://stackoverflow.com/a/2408987/1635817 – florianmski

2

1)首先創建一個數組,有什麼指示的項目在適配器選中狀態

(假設你延長BaseAdapter類用於此目的):

private boolean [] itemsChecked = new boolean [getCount()]; 

2)然後創建一個OnCheckedChangeListener

private OnCheckedChangeListener listener = new OnCheckedChangeListener() 
{ 
    @Override 
    public void onCheckedChanged(CompoundButton button, boolean checked) 
    { 
     Integer index = (Integer)button.getTag(); 
     itemsChecked[index] = checked; 
    } 
} 

3)在你的適配器getView()方法:

public View getView(int index, View view, ViewGroup parent) 
{ 
    /*...*/ 
    CheckBox checkBox = /*get the checkbox*/; 
    checkbox.setTag(index); 
    checkBox.setOnCheckedChangeListener(listener); 
    /*...*/ 
} 

4)onClick()方法:

public void onClick(View view) 
{ 
    //just get the boolean array somehow 
    boolean [] itemsChecked = adapter.getItemsCheckedArray(); 

    for(int i=0; i<itemsChecked.length; i++) 
    { 
     if(itemsChecked[i]) 
     { 
      //the i th item was checked 
     } 
     else 
     { 
       //it isnt checked 
     } 
    } 
}