checkbox select 全部删除问题
checkbox select all delete issue
我在自定义列表视图中有复选框,我有两个单独的按钮,一个到 select 全部,另一个要删除,但如果我 select 一个复选框和 select delete it works.but if i select all and delete it delete few of the data in lists,例如我在列表视图中有50条短信,一旦我select all并删除它删除一些短信,然后我再次按下删除它删除了另外几个这样的..建议一些解决方案
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();
}
我想当您在 for 循环中从 ArrayList 中删除项目时会出现问题。结果它的大小变小了,这会导致不良的副作用。
尝试像这样以相反的顺序迭代您的短信 ArrayList:
for (int i = sms.size()-1; i >= 0; i--) {
if(sms.get(i).getChecked() == true){
sms.remove(i);
}
}
这样减小 sms ArrayList 的大小不会影响循环。
我认为问题出在循环的上层。在 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();
}
});
我在自定义列表视图中有复选框,我有两个单独的按钮,一个到 select 全部,另一个要删除,但如果我 select 一个复选框和 select delete it works.but if i select all and delete it delete few of the data in lists,例如我在列表视图中有50条短信,一旦我select all并删除它删除一些短信,然后我再次按下删除它删除了另外几个这样的..建议一些解决方案
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();
}
我想当您在 for 循环中从 ArrayList 中删除项目时会出现问题。结果它的大小变小了,这会导致不良的副作用。
尝试像这样以相反的顺序迭代您的短信 ArrayList:
for (int i = sms.size()-1; i >= 0; i--) {
if(sms.get(i).getChecked() == true){
sms.remove(i);
}
}
这样减小 sms ArrayList 的大小不会影响循环。
我认为问题出在循环的上层。在 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();
}
});