2013-04-23 2 views
0

Я хочу сделать приложение, которое включает в себя listView с флажками и двумя кнопками с именем add и delete 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

Название невероятно обманчиво. ;-) –

+1

да, это @IceMAN только что отредактировал его. надеюсь, что они согласятся с названием, которое я предложил. любое название лучше, чем это. ;) –

+0

так что происходит? Или не происходит? И что ты пробовал? Вы должны задать конкретные вопросы, если хотите использовать этот сайт. Мы не собираемся делать вашу работу за вас, но мы поможем вам сделать это сами :) – drewmoore

ответ

1

по проверке checkbox добавить, что position в ArrayList скажет toBeDeleted, и при нажатии кнопки удаления, просто удалить элементы из ваш ArrayList с именем data в соответствии с положением, указанным в toBeDeleted, и вызовите метод адаптера notifyDataSetChanged().


Добавить checkedChangedListener в методе getView для CheckBox.

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; 
           } 
          } 
         } 

        } 
       }); 

Где список является ArrayList<Integer>, и для удаления

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

но перед удалением вы должны сортировать list в порядке убывания, чтобы правильно удалить, в противном случае вы можете получить IndexOutofBoundException

+0

@anujMathus я попробовал. но я не могу щелкнуть мой элемент списка. я имею в виду, что он не отвечает на это событие. если я заменяю флажок с помощью imageView, тогда он отлично работает. –

+0

@ Усман Риаз: Я обновил ответ. Попробуй. надеюсь, что он полезен ... :) –

+0

i appriciate your ans, но я уже решил свою проблему. см. мой ans –

Смежные вопросы