我有一个自定义列表视图,列表视图的每一行都包含一个复选框和一个文本字段。单击列表视图任何行中的任何复选框都应禁用其他复选框。如何实现此目的。
答案 0 :(得分:0)
声明一个复选框的数组列表。 在getView方法中的自定义适配器中:
将复选框放在arraylist中。
if(your condition==true) {
for(CheckBox c: lsitOfCheckBox){
c.setEnabled(false);
}
}
答案 1 :(得分:0)
在getView方法中的自定义适配器中:
if(your condition==true){
checkBox.setEnabled(false);
} else {
checkBox.setEnabled(true);
}
答案 2 :(得分:0)
首先,您应该使用Recycler视图,它比listview更好,更实用。
您需要具有从BaseAdapter扩展的自定义适配器类的待办事项。
您需要让适配器的列表列表进行迭代。在自定义模型中,您需要添加名为private boolean selected'
的新字段。
然后,您需要为适配器的getview()
方法中的复选框定义onclick侦听器。
然后在onclicklistener.onclick
方法中,您应该获得所点击项目的位置。并迭代所有数据并设置'item.selected = false;'
并且只设置list[clickPosition].selected = true;
然后拨打notifyDataSetChanged();
如果不发布更多数据,我希望你很清楚。
答案 3 :(得分:0)
首先,我建议使用RecyclerView,我会回答ListView的问题,但实际上解决方案的方式都是相似的。
假设您正在使用BaseAdapter中的ViewHolder pattern。在你的getView函数中设置一个onCheckedChangedListener,在里面创建一个函数,在实现你的适配器isListChecked
的接口的类中设置一个setListChecked
布尔值,应该类似于:
cbListItem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
myInterface.setListChecked(isChecked);
notifyDatasetChanged();
}
}
);
在getView中,您还需要检查isListChecked
布尔值并将其设置为CheckBox状态