私のListViewItemsには削除ボタンがあります。これらのボタンのクリックイベントから、データベースからIDを介してアイテムを削除する前に、確認ダイアログを表示したいと思います。IDはアイテムのViewHolderに保存されます。
AlertDialogのクリックハンドラーからアイテムのViewHolderにアクセスするにはどうすればよいですか?関連するコードは次のとおりです。コンパイラは、onClick(DialogInterfaceダイアログ、int whichButton)内の「V」をチョークします。
ボタンのタグにIDを保存することはできますが、それは厄介です。
最小のAPIレベル8をターゲットにしていますが、より高いAPIレベルでこれを解決できるかどうか教えてください。これは私の最初のAndroidプログラムなので、明らかな解決策があるかもしれません。
private static class MyAdapter extends CursorAdapter {
//.....
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = View.inflate(context, R.layout.my_detail, null);
MyViewHolder holder = new MyViewHolder();
holder.deleteButton = (Button) view.findViewById(R.id.deleteButton);
holder.deleteButton.setOnClickListener(deleteButtonClickListener);
holder.editButton = (Button) view.findViewById(R.id.editButton);
holder.editButton.setOnClickListener(editButtonClickListener);
holder.nameTextView = (TextView) view
.findViewById(R.id.nameTextView);
holder.itemId = cursor.getLong(cursor
.getColumnIndex(MyData.ID_COLUMN));
view.setTag(holder);
return view;
} // newView()
//.....
private OnClickListener deleteButtonClickListener = new OnClickListener() {
public void onClick(View v) {
new AlertDialog.Builder(_context)
.setTitle("Delete?")
.setMessage("Delete item?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
MyViewHolder holder = (MyViewHolder) ((View) v
.getParent()).getTag();
long itemId = holder.itemId;
_MyData.deleteItem(itemId);
}
}).setNegativeButton(android.R.string.no, null)
.show();
} // onClick()
}; // deleteButtonClickListener
//.....
}