为啥警报对话框在 Activity RecyclerView 适配器中不起作用

Posted

技术标签:

【中文标题】为啥警报对话框在 Activity RecyclerView 适配器中不起作用【英文标题】:Why AlertDialog doesn't work from Activty RecycleView Adapter为什么警报对话框在 Activity RecyclerView 适配器中不起作用 【发布时间】:2021-10-01 06:16:03 【问题描述】:

我不知道为什么下面的代码不适用于 Activity RecycleView Adapter 类,但我使用 Fragment RecycleView Adapter 类和绝对的工作做到了。有人可以帮忙吗?

        viewHolder.rlCV.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 


            LayoutInflater inflater = LayoutInflater.from(mContext);
            final View vv = inflater.inflate(R.layout.popup_pdf, null);
            final AlertDialog.Builder alert = new AlertDialog.Builder(
                    mContext);

            alert.setView(vv);
            dialog = alert.create();
            dialog.show();

            ImageButton btnCancel=vv.findViewById(R.id.btnCancel12);
            pdfView=vv.findViewById(R.id.pdfView);

           //new RetrivePdfStremQbank().execute(cvUri);

            btnCancel.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View v) 
                    dialog.dismiss();
                
            );
        
    );

运行时显示错误消息:

android.view.WindowManager$BadTokenException: 无法添加窗口 -- 令牌 null 无效;您的活动正在运行吗? 在 android.view.ViewRootImpl.setView(ViewRootImpl.java:1003) 在 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:384) 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:101) 在 android.app.Dialog.show(Dialog.java:430) 在 com.rpaskewdevelopment.suap.Adapter.Comment_info_Adapter$2.onClick(Comment_info_Adapter.java:127)

【问题讨论】:

mContext 不是Activity,这可能意味着Adapter 在其构造函数调用中被赋予了错误的Context 私有上下文 mContext;是的。我定义的上下文是适配器上的 mContext Activity中,当你实例化Adapter时,你传递了错误的Context。例如,您可能有类似MyAdapter adapter = new MyAdapter(getApplicationContext()); 的内容。那是错误的Context。您需要传递当前的Activity;例如,new MyAdapter(this)new MyAdapter(MyActivity.this),视需要而定。 向适配器传递一个arrayList 和一个字符串。请检查代码:comment_info_adapter =new Comment_info_Adapter(getApplicationContext(), commentModels,file); recyclerView.setAdapter(comment_info_adapter); 哦。人。我搞砸了。我明白了,你想修正什么。现在没事了。非常感谢和赞赏:)。 【参考方案1】:

您应该将 Activity 上下文传递给您的适配器,然后使用它来创建警报对话框。

【讨论】:

以上是关于为啥警报对话框在 Activity RecyclerView 适配器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

警报对话框 - 如何?

$RECYCLE.BIN文件夹删除

Recycle -- 项目总结

为啥我的动态确认框只能使用一次?

防止在Android中的屏幕旋转对话框解除

如何在脚本中使用对话框制作警报 onclick 功能以将警报容器重用于其他对话框