如何在 RecyclerView 适配器中的 ClickListener 上显示 AlertDialog

Posted

技术标签:

【中文标题】如何在 RecyclerView 适配器中的 ClickListener 上显示 AlertDialog【英文标题】:How to display an AlertDialog on ClickListener in a RecyclerView Adapter 【发布时间】:2021-11-29 17:31:30 【问题描述】:

我想在用户按下删除图像按钮时为他显示一个警告对话框。但是,按下按钮时应用会崩溃。

这是适配器内 onClickListener 的代码:

holder.delete.setOnClickListener(new View.OnClickListener() 
            String productId = String.valueOf(item.getId());
            @Override
            public void onClick(View v) 
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(mCtx);
                alertDialog.setTitle("App Name");
                alertDialog.setMessage("Are you sure you want to delete this item?");
                alertDialog.setPositiveButton("Delete", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialog, int which) 
                        deleteItem(productId);
                        dialog.cancel();
                    
                );
                alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialog, int which) 
                          dialog.cancel();
                    
                );

                AlertDialog dialog = alertDialog.create();
                dialog.show();
            
        );

这就是我的 LogCat 的样子: 错误在这一行:

AlertDialog dialog = alertDialog.create();

【问题讨论】:

这能回答你的问题吗? Unfortunately MyApp has stopped. How can I solve this? 您设置的是局部变量而不是字段。删除 AlertDialog 定义 不,Logcat 中没有显示任何内容。它只写应用程序已死 我非常怀疑,您是否将 logcat 设置为正确的设备?发张图片 是的,我不知道,我已将图片添加到问题中 【参考方案1】:
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mCtx);

对话框需要活动。如果你传递上下文,你会收到一个错误

使用 onclickListener 接口并在您的活动中实现,然后将您的活动传递给您的对话框!

【讨论】:

以上是关于如何在 RecyclerView 适配器中的 ClickListener 上显示 AlertDialog的主要内容,如果未能解决你的问题,请参考以下文章

如何在MVVM架构中观察RecyclerView适配器中的LiveData?

如何使用适配器为recyclerview从字符串数组列表中的元素获取字符串

如何在我的 recyclerview 适配器中将 API 日期转换为 Kotlin 中的字符串?

如何使用Recyclerview中单击的适配器位置获取数据?

如何使用 DiffUtil 更新 RecyclerView 适配器

如何更新/刷新 RecyclerView 中的特定项目