Android - 如何使用checkBox从listView中删除多个项目?

时间:2014-06-20 02:48:33

标签: android listview

当我尝试从listView中删除多个已检查项时,我遇到了问题。如果我开始从下到上删除项目从我的列表中删除,但是当我从上到下或者检查随机项目时出现问题。问题是未检查的项目是否已删除,但未删除的项目将被删除。

public class MainActivity extends ActionBarActivity  {
private EditText etn,etl,etd;
private Button add;
private Button rmv;
private ListView listView;
private ArrayList<Data> list;
private MyCustomAdapter dataAdapter = null;

@Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu);
    listView = (ListView) findViewById(R.id.listView1);
    list = new ArrayList<Data>();
             add = (Button) findViewById(R.id.btn_add);
             etn = (EditText) findViewById(R.id.edit_name);
     eta = (EditText) findViewById(R.id.edit_lastname);
     etd = (EditText) findViewById(R.id.edit_document);
     rmv = (Button) findViewById(R.id.btn_delete);

            displayView();



 }














 public class Data {
 long document;
 String name;
 String lastname;
 boolean selected = false;

 public Data(long document, String name, String lastname, boolean selected){
     this.document=document;
     this.name=nom;
     this.lastname=lastname;
     this.selected = selected;
 }

 public String getName(){
     return name;
 }

 public String getLastName(){
     return lastname;
 }

 public long getDocument(){
     return document;
 }

 public boolean isSelected() {
      return selected;
 }

 public void setSelected(boolean selected) {
      this.selected = selected;
     }
}



















public void displayView(){
    String name = etn.getText().toString();
String lastname= eta.getText().toString();
long document = Integer.valueOf(etd.getText().toString());
Data edata = new Data(document,name,lastname,false);
    list.add(edata);
      dataAdapter = new MyCustomAdapter(this,
        R.layout.list_info, list);
      listView.setAdapter(dataAdapter);

}




public void delete(View view){
      deleteListItem();
}



private void deleteListItem(){
 if(list.isEmpty()){
     Toast.makeText(getApplicationContext(),
            "No items to delete.",
            Toast.LENGTH_LONG).show();
     return;
 }
 int itemCount = listView.getCount();
   for(int i=itemCount - 1 ; i>=0; i--){
     Data aux = list.get(i);
     if(aux.isSelected()){
         dataAdapter.remove(aux);
     }
    }
    dataAdapter.notifyDataSetChanged();
}







private class MyCustomAdapter extends ArrayAdapter<Data> {
          private ArrayList<Data> list;

          public MyCustomAdapter(Context context, int textViewResourceId, 
            ArrayList<Data> list) {
           super(context, textViewResourceId, list);
           this.list = new ArrayList<Data>();
           this.list.addAll(list);
          }

          private class ViewHolder {
           TextView name;
           TextView lname;
           TextView doc;
           CheckBox ck;
          }

          @Override
          public View getView(int position, View convertView,   ViewGroupparent) {  

           ViewHolder holder = null;
           if (convertView == null) {
           LayoutInflater vi = (LayoutInflater)getSystemService(
             Context.LAYOUT_INFLATER_SERVICE);
           convertView = vi.inflate(R.layout.list_info, null);
           holder = new ViewHolder();
           holder.name = (TextView) convertView.findViewById(R.id.name);
           holder.ck = (CheckBox) convertView.findViewById(R.id.checkBox1);
           holder.lname = (TextViewconvertView.findViewById(R.id.lastname);
           holder.doc = (TextView)convertView.findViewById(R.id.document);

           convertView.setTag(holder);
           holder.ck.setOnClickListener( new View.OnClickListener() {  
                 public void onClick(View v) {  
                  CheckBox cb = (CheckBox) v ;  
                  Data edata = (Data) cb.getTag();  
                  Toast.makeText(getApplicationContext(),
                   "Checkbox: " + cb.getText() +
                   " is " + cb.isChecked(), 
                   Toast.LENGTH_LONG).show();
                  edata.setSelected(cb.isChecked());
                 }  
                });  

           } 
           else {
            holder = (ViewHolder) convertView.getTag();
           }

           Data aux = list.get(position);
           long document = aux.getDocument();
           holder.doc.setText("Doc:" + Long.toString(document));
           holder.name.setText ("                          " + "Name:" + aux.getName()+ "   ");
           holder.lname.setText("Last name:" + aux.getLastName());
           holder.ck.setTag(aux);
           holder.ck.setChecked(aux.isSelected());

           return convertView;

          }
      }

1 个答案:

答案 0 :(得分:1)

我认为问题存在于这个块中:

int itemCount = listView.getCount();
   for(int i=itemCount - 1 ; i>=0; i--){
     Data aux = list.get(i);
     if(aux.isSelected()){
         dataAdapter.remove(aux);
     }
   }

试试这样:

int itemCount = listView.getCount();
   for(int i=itemCount - 1 ; i>=0; i--){
     Data aux = dataAdapter.getItem(i);
     if(aux.isSelected()){
         dataAdapter.remove(aux);
     }
    }

注意:我不确定,请尝试让我知道结果。:)