我在我的应用程序中使用多选列表视图。具体来说就是simple_list_item_activated_1。
我有一些代码,一个按钮,将选择所有listview项目。我有一些逻辑说,如果已经选择了所有项目,则取消选择所有项目。
第一次按下按钮时,它将按预期选择列表中的所有项目。当我第二次按下按钮时,它会按预期取消选择所有项目。
这是我的问题: 当我第三次按下按钮时,“selectedCount”仍然等于“childCount”。显然我的代码永远不会进入If语句。
有谁知道为什么会这样?或者也许有更好的方法来实现我想要实现的目标?
int childCount = officerList.getChildCount();
int selectedCount = officerList.getCheckedItemPositions().size();
if(childCount != selectedCount){
for (int i = 0; i < officerList.getChildCount(); i++) {
officerList.setItemChecked(i, true);
}
}else{
for (int i = 0; i < officerList.getChildCount(); i++) {
officerList.setItemChecked(i, false);
}
}
}
答案 0 :(得分:0)
尝试这个逻辑,如果没有检查任何项目,它将检查所有项目,否则将只检查未选中的项目,反之亦然。
public void onClick(View v) {
SparseBooleanArray sparseBooleanArray = officerList.getCheckedItemPositions();
if(sparseBooleanArray != null && sparseBooleanArray.size() >0) {
for (int index = 0; index < sparseBooleanArray.size(); index++) {
if(sparseBooleanArray.valueAt(index)){
officerList.setItemChecked(sparseBooleanArray.keyAt(index),true);
}
else {
officerList.setItemChecked(sparseBooleanArray.keyAt(index),false);
}
}
}
else {
for (int index = 0; index < officerList.getCount(); index++) {
officerList.setItemChecked(index,true);
}
}
}
答案 1 :(得分:0)
我设法回答了我自己的问题。使用getCheckItemPositions()。size()是实现我想要的不可靠的方法。
这将返回所有已检查项目的sparseBooleanArray(),因此第一次正常工作时,没有选择任何内容,因此它将返回0.然后一旦选中所有内容,sparseBooleanArray将等于所有项目中的所有项目。列表,因为他们都被选中。
然而,据我所知,spareBooleanArray是一个存储位置的数组,如果选择了它,则是一个布尔标志。在我按下第三个选择全部按钮的情况下,数组的大小仍然等于列表项的数量。
我如何修复我的问题,就是使用getCheckedItemCount(),它只返回我原来想要的所选项目的数量。希望这个答案可以帮助别人。
int childCount = officerList.getChildCount();
int selectedCount = officerList.getCheckedItemCount();
if(childCount != selectedCount){
for (int i = 0; i < officerList.getChildCount(); i++) {
officerList.setItemChecked(i, true);
}
}else{
for (int i = 0; i < officerList.getChildCount(); i++) {
officerList.setItemChecked(i, false);
}
}
}