我的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.
我需要一些东西来阻止无限循环。
答案 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
中的位置。
然后,当用户结束时,只需遍历列表即可知道已选择了哪个位置。