【问题标题】:How can I set a click listener for a RecyclerView list element in order to display an AlertDialog?如何为 RecyclerView 列表元素设置单击侦听器以显示 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
  • 我尝试将上下文传递给持有者,但它不起作用

标签: android android-recyclerview android-alertdialog onitemclicklistener android-viewholder


【解决方案1】:

将您的 XML 布局包装在一个线性布局中,并为该线性布局分配一个点击监听器

【讨论】:

    猜你喜欢
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    相关资源
    最近更新 更多