我有一个显示Select All
的按钮。点击后,我的check boxes
中的所有listview
都应该被检查。相同的按钮将文本更改为Clear All
。单击后,所有复选框都将取消选中,文本将返回Select All
....
然而,在我的listview
中,每隔一个按钮就会被选中或取消选中。
点击Select All
后,checkbox 1
,3
和5
会被检查。 Checkbox 2
和4
取消选中。文字转为Clear All
。
点击Clear All
后,checkbox 1
,3
和5
将取消选中。我会检查Checkbox 2
和4
。文字转为Select All
。
我看不出我的代码有什么问题。或者它可能是我的应用程序的另一部分,但没有错误或警告,不知道从哪里开始调试。感谢。
btnCheckAll.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int count = MatchingContactsAsArrayList.size();
for (int i = 0; i < count; i++) {
LinearLayout itemLayout = (LinearLayout) listView.getChildAt(i); // Find by under LinearLayout
CheckBox checkbox = (CheckBox) itemLayout.findViewById(R.id.checkBoxContact);
if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) {
checkbox.setChecked(true);
btnCheckAll.setText("Clear All");
}
else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){
checkbox.setChecked(false);
btnCheckAll.setText("Select All");
}}}});
答案 0 :(得分:1)
我认为问题可能在这里:
if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) {
checkbox.setChecked(true);
btnCheckAll.setText("Clear All");
}else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){
checkbox.setChecked(false);
btnCheckAll.setText("Select All");
}
这个if
位于一个循环中,所以它在每个循环中作为swich turin开启和关闭。
在每个循环中,文本&#34;全选&#34; /&#34;全部清除&#34;将改变,所以将在下一个循环中评估按钮状态。
答案 1 :(得分:1)
for循环中的条件一直在改变true
和false
,因为第一个循环更改Text,第二个循环再次更改它,并且它在此部分继续更改(阅读评论!):
if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) {//This condition will be true on first round and 3 and 5 and 7...
checkbox.setChecked(true);
btnCheckAll.setText("Clear All");
}
else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){//And this one will be true in 2 and 4 and 6...
checkbox.setChecked(false);
btnCheckAll.setText("Select All");
<强> SOLUTION:强>
btnCheckAll.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
boolean toCheck=true;
//THE CONDITION SHOULD BE OUTSIDE THE LOOP!
if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) {
toCheck=true;
btnCheckAll.setText("Clear All");
}
else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){
toCheck=false;
btnCheckAll.setText("Select All");
}
int count = MatchingContactsAsArrayList.size();
for (int i = 0; i < count; i++) {
LinearLayout itemLayout = (LinearLayout) listView.getChildAt(i); // Find by under LinearLayout
CheckBox checkbox = (CheckBox) itemLayout.findViewById(R.id.checkBoxContact);
checkbox.setChecked(toCheck);
}}
});