0

listViewチェックボックスと と という名前の 2 つのボタン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();
            }
        });
    }
4

1 に答える 1

1

letでcheckbox追加を確認し、position削除ボタンをクリックすると、自分の位置に応じて名前付きの項目を削除し、アダプター メソッドを呼び出します。ArrayListtoBeDeletedArrayListdatatoBeDeletednotifyDataSetChanged()


checkedChangedListenergetViewメソッドに a を追加します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;
                                }
                            }
                        }

                    }
                });

list はArrayList<Integer>であり、削除する場合

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

ただし、削除する前にlist、正しく削除するために降順で並べ替える必要があります。そうしないと、IndexOutofBoundException

于 2013-04-23T11:29:13.647 に答える