我的ListViewItems中有删除按钮。在这些按钮的点击事件中,我想在通过其ID从数据库删除项目之前显示确认对话框。 ID存储在项的ViewHolder中。
如何从AlertDialog的点击处理程序访问项的ViewHolder?以下是相关代码。编译器在onClick(DialogInterface dialog, int whichButton)中因“V”而出现错误。
我可以将ID存储在按钮的标记中,但感觉很笨拙。
我针对最低API级别8,但请告诉我如果更高的API级别有解决方案。这是我的第一个Android程序,所以可能有一个显而易见的解决方案。
如何从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
//.....
}