Android CheckedTextView

时间:2012-09-07 20:46:34

标签: android listview android-listview checkedtextview

我的listview包含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.

我需要一些东西来阻止无限循环。

2 个答案:

答案 0 :(得分: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
        } 
    }
}

答案 1 :(得分:0)

一种解决方案是使用ArrayList个职位。 当用户选中/取消选中checkbox时,相应地添加/删除ArrayList中的位置。 然后,当用户结束时,只需遍历列表即可知道已选择了哪个位置。