0

我有一个listview 包含一个checkedtextview. 我的应用程序从列表视图的顶部移动到底部。我想在调用操作之前检查是否检查了该项目。如果未选中,我想移至列表中的下一项。

例如

第 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.

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

4

2 回答 2

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
        } 
    }
}
于 2012-09-07T21:55:30.610 回答
0

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

于 2012-09-07T20:51:44.993 回答