web-dev-qa-db-ja.com

android-ロングクリックでListViewからアイテムを削除する

ロングクリックでリストビューからアイテムを削除しようとすると、問題が発生します。以下はコードです:

public class MListViewActivity extends ListActivity {

private ListView lv;
private String[] some_data = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    some_data = getResources().getStringArray(R.array.mdata);

    // Bind resources Array to ListAdapter
    ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this,
            R.layout.list_item, R.id.label, some_data);
    this.setListAdapter(myAdapter);

    lv = getListView();
    lv.setDividerHeight(3);

    lv.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int arg2, long arg3) {

            // Can't manage to remove an item here

            return false;
        }
    });
}

どんな助けでも大歓迎です

11
Droidman

Arraysを使用しないでください。ArrayListを使用してアイテムを削除およびListviewに追加する必要があります。

配列サイズが宣言されると、特定のインデックスのデータを変更できますが、アイテムを削除したり追加したりすることはできません。

したがって、ArrayListを取得し、ListViewアイテムを長押ししたときに、Arraylistのremoveメソッドを呼び出して、データセットが変更されたことを通知します。

例:

ArrayList<String> al = new ArrayList<String>();

ロングクリック内に以下のコードを記述してアイテムを削除します。

al.remove(arg2);//where arg2 is position of item you click
myAdapter.notifyDataSetChanged();
15
TNR

試してみてください

lv.setOnItemLongClickListener(new OnItemLongClickListener() {

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view,
            int position, long arg3) {

              myAdapter.remove(some_data[position]);
              myAdapter.notifyDataSetChanged();

        return false;
    }

});
11
Georgy Gobozov