我有自定义列表视图中的复选框,我有两个单独的按钮一个选择所有和另一个删除但我有很大的问题,如果我选择一个复选框并选择删除它的工作。但如果我选择所有并删除它删除列表中的少数数据,例如我在列表视图中有50个短信一旦我选择全部并删除它删除几个短信再次按删除它删除另外几个像这样...提出一些解决方案
sel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i <sms.size() ; i++) {
if(sms.get(i).getChecked() == false ) {
sms.get(i).setChecked(true);
}else if(sms.get(i).getChecked()==true) {
sms.get(i).setChecked(false);
}
}
((datalist)mlistView.getAdapter()).notifyDataSetChanged();
}
});
del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i=0; i<sms.size(); i++){
if(sms.get(i).getChecked() == true){
sms.remove(i);
}
}
((datalist)mlistView.getAdapter()).notifyDataSetChanged();
}
答案 0 :(得分:2)
我想当你从for循环中的ArrayList中删除项目时会出现问题。因此,它的大小会减少,这会引起不良副作用。
尝试以相反的顺序迭代你的sms ArrayList:
for (int i = sms.size()-1; i >= 0; i--) {
if(sms.get(i).getChecked() == true){
sms.remove(i);
}
}
这样,缩小sms ArrayList的大小不会影响循环。
答案 1 :(得分:0)
我认为问题是循环的问题。在else if语句中,您取消选中复选框。请尝试下面的代码,
sel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i <sms.size() ; i++) {
if(sms.get(i).getChecked() == false ) {
sms.get(i).setChecked(true);
}else if(sms.get(i).getChecked()==true) {
sms.get(i).setChecked(true);
}
}
((datalist)mlistView.getAdapter()).notifyDataSetChanged();
}
});