如何为 RecyclerView 列表元素设置单击侦听器以显示 AlertDialog?
Posted
技术标签:
【中文标题】如何为 RecyclerView 列表元素设置单击侦听器以显示 AlertDialog?【英文标题】:How can I set a click listener for a RecyclerView list element in order to display an AlertDialog? 【发布时间】:2020-04-25 08:37:21 【问题描述】:我正在尝试处理 RecyclerView 列表元素的 onItemClick 事件,以便在选择项目时显示 AlertDialog。为此,我在方法 bindViewHolder 中放置了单击侦听器,在该方法中我可以访问实际的可视组件,但仍然出现错误
Unable to add window -- token null is not valid; is your activity running?
这是我的 ViewHolder 类
public class MessageViewHolder extends RecyclerView.ViewHolder
private TextView senderTextView;
private TextView messageTextView;
private TextView dateTextView;
public MessageViewHolder(final View itemView)
super(itemView);
senderTextView = itemView.findViewById(R.id.chatMessageSenderTW);
messageTextView = itemView.findViewById(R.id.chatMessageTW);
dateTextView = itemView.findViewById(R.id.chatMessageDateTW);
public void bindViewHolder(final ChatMessage chatMessage)
senderTextView.setText(chatMessage.getSender());
messageTextView.setText(chatMessage.getMessage());
dateTextView.setText(chatMessage.getDate());
itemView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
AlertDialog.Builder myDialog = new AlertDialog.Builder(v.getContext());
myDialog
.setTitle("Confirmation")
.setMessage("Please confirm the item selection")
.setPositiveButton("Confirm", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
)
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
)
.show();
);
我还检查了v.getContext()
并且不为空的上下文。
【问题讨论】:
看起来您的视图未附加到窗口。但是做 smt in on bind 不是好办法。尝试通过接口将其委托给您的活动或片段 尝试将Activity
上下文传递给持有者并使用该上下文创建AlertDialog
我尝试将上下文传递给持有者,但它不起作用
【参考方案1】:
将您的 XML 布局包装在一个线性布局中,并为该线性布局分配一个点击监听器
【讨论】:
以上是关于如何为 RecyclerView 列表元素设置单击侦听器以显示 AlertDialog?的主要内容,如果未能解决你的问题,请参考以下文章
如何为android recyclerview中的最大字符串设置textview高度?
如何为 RecyclerView 设置 onItemClickListener? [复制]