gpt4 book ai didi

android - 在 ListViewItem 的按钮单击中创建 AlertDialog 时,如何从 AlertDialog 的单击处理程序获取 ListViewItem 的 ViewHolder?

转载 作者:太空狗 更新时间:2023-10-29 14:25:01 26 4
gpt4 key购买 nike

我的 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
//.....
}

最佳答案

您的代码实际上看起来很不错,唯一需要更改的是 v 需要声明为 final,如下所示:

private OnClickListener deleteButtonClickListener = new OnClickListener()
{
public void onClick(final View v) { }
}

这是因为 Java 实现闭包的方式。 v 应该是 final 以便我们在 setPositiveButton() 中实现的 DialogInterface.OnClickListener 可以访问该变量.

关于android - 在 ListViewItem 的按钮单击中创建 AlertDialog 时,如何从 AlertDialog 的单击处理程序获取 ListViewItem 的 ViewHolder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13348163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com