2013-04-23 38 views
0

我想制作一个应用程序,其中包括带有复选框的listView以及名为adddelete selected的两个按钮。我想删除列表视图中选中的所有项目。尽管我付出了很多努力,但我无法做到这一点。任何帮助,将不胜感激。删除列表视图中选中的项目

这里是我的代码

package com.example.chkbokinlistview; 

public class Adapter extends ArrayAdapter<Movies> { 

    ArrayList<Movies> data; 
    Context context; 
    int id; 
    private Holder h; 

    public Adapter(Context context, int textViewResourceId, ArrayList<Movies> objects) { 
     super(context, textViewResourceId, objects); 
     this.data = objects; 
     this.context = context; 
     this.id = textViewResourceId; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final int p = position; 
     View v = convertView; 
     LayoutInflater l = ((Activity)context).getLayoutInflater(); 
     h = new Holder(); 
     if (v == null) { 
      v = l.inflate(id, parent, false); 
      h.tv = (TextView) v.findViewById(R.id.textView1); 
      h.cb = (CheckBox) v.findViewById(R.id.checkBox1); 
      v.setTag(h); 
     }else{ 
      h = (Holder) v.getTag(); 
      h.cb.setChecked(true); 
     } 
     h.tv.setText(data.get(position).movieName); 
     h.cb.setChecked(data.get(position).deleted); 
     return v; 
    } 
    public void delete(){ 
     //how to delete all the items that are checked 
    } 

    class Holder{ 
     TextView tv; 
     CheckBox cb; 
    } 

} 

MainActivity.java

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     lv = (ListView) findViewById(R.id.lv); 
     bDelete = (Button) findViewById(R.id.bDelete); 
     bAdd = (Button) findViewById(R.id.bAdd); 

     list = new ArrayList<Movies>(); 
     a = new Adapter(this, R.layout.listitem, list); 
     lv.setAdapter(a); 

     bDelete.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       a.delete(); 
      } 
     }); 
     bAdd.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       final EditText et = new EditText(MainActivity.this); 
       dialog = new AlertDialog.Builder(MainActivity.this) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface arg0, int arg1) { 
         // TODO Auto-generated method stub 
         list.add(new Movies(et.getText().toString(), false)); 
         a.notifyDataSetChanged(); 
         dialog.dismiss(); 
        } 
       }) 
       .setTitle("ADD Movie") 
       .setView(et) 
       .create(); 
       dialog.show(); 
      } 
     }); 
    } 
+7

标题令人难以置信的误导。 ;-) – 2013-04-23 11:06:12

+1

是的@IceMAN只是编辑它。希望他们接受我建议的标题。任何标题都比这更好。 ;) – 2013-04-23 11:08:55

+0

所以发生了什么?还是没有发生?你有什么尝试?如果你想利用这个网站,你必须提出具体的问题。我们不会为你做你的工作,但我们会帮你自己做:) – drewmoore 2013-04-23 11:13:27

回答

1

在检查checkbox添加positionArrayList让说toBeDeleted,当你点击删除按钮,只需移除项目您的ArrayList根据您在toBeDeleted中的位置命名为data,并调用适配器方法notifyDataSetChanged()


getView方法添加checkedChangedListenerCheckBox

h.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

        @Override 
        public void onCheckedChanged(CompoundButton arg0, 
          boolean arg1) { 
         // TODO Auto-generated method stub 
         if (arg1) { 
          list.add(position); 
         } else { 
          for (int i = 0; i < list.size(); i++) { 
           if (list.get(i) == position) { 
            list.remove(i); 
            break; 
           } 
          } 
         } 

        } 
       }); 

其中list是ArrayList<Integer>, 和删除

private void delete() { 
    for(int i = 0 i<list.size;i++) 
     data.remove(list.get(i)); 
} 

但删除您的list在decending进行排序,以正确删除之前,否则你可能会得到一个IndexOutofBoundException

+0

@anujMathus我试过了。但我无法点击我的列表项目。我的意思是它没有响应这个事件。如果我用imageView替换复选框,那么它工作正常。 – 2013-04-23 12:10:44

+0

@Usman Riaz:我已经更新了答案。尝试一下。希望它的帮助...... :) – 2013-04-23 12:30:24

+0

我appriciate你的答案,但我已经解决了我的问题。看到我的答案 – 2013-04-23 12:54:17

相关问题