ロングクリックでリストビューからアイテムを削除しようとすると、問題が発生します。以下はコードです:
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;
}
});
}
どんな助けでも大歓迎です
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();
試してみてください
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;
}
});