我的 ListViewItems 中有删除按钮。从这些按钮的点击事件中,我想在通过数据库中的 ID 删除项目之前显示一个确认对话框。ID 存储在项目的 ViewHolder 中。
如何从 AlertDialog 的单击处理程序访问项目的 ViewHolder?这是相关的代码。编译器在 onClick(DialogInterface dialog, 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
//.....
}