データベースの文字列列から作成されたリスト メニューがあります。ユーザーがリスト メニュー項目をクリックすると、それが削除されます。リスト項目の位置を DBAdapter の削除関数に渡すことでこれを行っています。
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
db.deleteContact(position);
}
この関数は、対応する行インデックスを見つけて削除します。
public boolean deleteContact(long rowId) {
return db.delete(DATABASE_TABLE, KEY_NAME + "=" + rowId, null) > 0;
}
問題 (おそらくほとんどの人にとって非常に明白です) は、ユーザーがリスト メニュー項目 2 を削除すると、対応するインデックスがテーブルから削除されると、リスト メニューが更新され、以前は位置 3 にあった項目が現在ユーザーがそれを削除しようとすると、削除関数はパラメーターとして「2」を受け取りますが、削除する行のインデックスは 3 です。
これはばかげた問題であることはわかっていますが、誰かが効果的な回避策を提案できますか? ありがとう