gpt4 book ai didi

android - NullPointerException - 尝试在空对象引用上调用虚拟方法 RecyclerView$ViewHolder.shouldIgnore()'

转载 作者:IT老高 更新时间:2023-10-28 23:11:29 28 4
gpt4 key购买 nike

自升级到 Android 支持 23.2.0 以来,一些开发人员报告看到​​以下堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$ViewHolder.shouldIgnore()' on a null object reference
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2913)
at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1445)
at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:144)
at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:282)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:821)
at android.view.Choreographer.doCallbacks(Choreographer.java:606)
at android.view.Choreographer.doFrame(Choreographer.java:575)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:807)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6895)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

这发生在启用 RecyclerView 的更改动画并调用相应的 RecyclerView.Adapter 方法 notifyItemInserted()、notifyItemRemoved() 等以指示对适配器管理的列表进行了孤立的更改(而不是批量更改,如 notifyDataSetChanged()) 所示。

这是由于 RecyclerView 中的错误,还是我们开发人员做错了什么?

最佳答案

在我的例子中,错误是因为我在一个项目的 Root View 中设置了一个新的 RecyclerView.LayoutParams

然后我意识到 RecyclerView 项目 View 实际上将它们的 ViewHolders 存储在自定义 LayoutParams 类中。因此,当我重置 LayoutParams ViewHolder 引用时,它就永远消失了。稍后会导致 NullPointerException 崩溃。

在我停止将 RecyclerView.LayoutParams 设置到项目 rootView 后,问题就消失了。 :)

所以。停止在您的 ViewHolder 中这样做:

//DON'T DO THAT
RecyclerView.LayoutParams params = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
itemRoot.setLayoutParams(params);

关于android - NullPointerException - 尝试在空对象引用上调用虚拟方法 RecyclerView$ViewHolder.shouldIgnore()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35786072/

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