gpt4 book ai didi

android - RecyclerView 适配器中的 LayoutInflater

转载 作者:行者123 更新时间:2023-11-30 00:02:05 24 4
gpt4 key购买 nike

我试图在回收站 View 适配器中创建一个弹出窗口,以便在用户单击回收站 View 的某个项目时显示一个小菜单。这是弹出功能:

public void Popup(final int id) {
AlertDialog.Builder rBuilder = new AlertDialog.Builder(context);
LayoutInflater i = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rView = i.inflate(R.layout.comment_setting_popup, null);
rBuilder.setView(rView);
dialog = rBuilder.create();
dialog.show();
}

我在适配器的 onBindViewHolder 中调用这个函数。此代码在一个适配器中工作正常,但在另一个适配器中它总是向我显示相同的错误:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ayhemprod.jokesbox, PID: 4939
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:765)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
at android.app.Dialog.show(Dialog.java:330)
at com.ayhemprod.jokesbox.Adapters.AddShowCommentsAdapter.signalePopup(AddShowCommentsAdapter.java:295)
at com.ayhemprod.jokesbox.Adapters.AddShowCommentsAdapter$1.onClick(AddShowCommentsAdapter.java:71)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

我尝试了一些我在 stackoverflow 中找到的解决方案,但没有任何帮助,我找不到问题的根源,尤其是相同的代码在同一项目的另一个适配器中工作。

更新:这是 onBindViewHolder 的代码:

public void onBindViewHolder(AddShowCommentsAdapter.MyViewHolder holder, final int position) {
Comment c = commentsList.get(position);
holder.comment_menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signalePopup(commentsList.get(position).getId());
}
});
}

我获取上下文时抛出适配器构造函数,当我从 Activity 中调用适配器时,我将 getApplicationContext 添加为参数。

public AddShowCommentsAdapter(List<Comment> commentsList, Context context) {
this.context = context;
this.commentsList = commentsList;
}

最佳答案

AlertDialog 的情况下,您应该使用 Activity 作为您的 Context 而不是 getApplicationContext()

您可以在此处找到更多详细信息: Why does AlertDialog.Builder(Context context) only accepts Activity as a parameter?

这里: Dialog throwing "Unable to add window — token null is not for an application” with getApplication() as context

关于android - RecyclerView 适配器中的 LayoutInflater,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49749364/

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