2013-04-23 37 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

相關問題