削除ボタンのあるリストビュー項目があります。このボタンを押すと、行が削除されます。私のアダプターは、データが sqllite db に格納されるときに CursorAdapter を拡張します。
削除コードはカスタム アダプターにあります。
public void bindView(View view, final Context context, final Cursor c) {
ViewHolder holder = (ViewHolder)view.getTag();
if(holder == null){
holder = new ViewHolder();
holder.id = c.getInt(ID);
holder.delB = (Button)view.findViewById(R.id.delB);
final int id = holder.id;
holder.delB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
context.getContentResolver().delete(SeriesContentProvider.SERIES_CONTENT_URI,
DBHelper.COLUMN_ID+"=?", new String[]{String.valueOf(id)});
}
});
view.setTag(holder);
}
このリストがあるとします。
アイテム1 アイテム2 アイテム3
item2 を削除することにしました。すべて正常に動作します。
アイテム1 アイテム3
item3 を削除すると、次のようになります。
アイテム3
代わりにitem1が削除されました!なんで?
編集:最初に新しいアイテムを追加すると発生します。とにかく、アイテムを追加してアプリを閉じ、もう一度起動すると問題なく動作します。System.out で確認したところ、新しいアイテムを追加すると、ホルダー クラスの id 属性が台無しになっているようです...