6

我收到一些关于 StaggeredGridLayoutManager 中发生 NullPointerException 的崩溃报告。看起来我的用户中大约有 10% 遇到了这个问题。

我有一个非常基本的 RecyclerView 和一个基本的适配器,没什么特别的,我确实尝试在我的设备中重现这个错误,但一点运气都没有。

这是我收到的原始报告:

java.lang.NullPointerException
   at android.support.v7.widget.StaggeredGridLayoutManager.recycleFromStart(StaggeredGridLayoutManager.java:1661)
   at android.support.v7.widget.StaggeredGridLayoutManager.recycle(StaggeredGridLayoutManager.java:1529)
   at android.support.v7.widget.StaggeredGridLayoutManager.fill(StaggeredGridLayoutManager.java:1471)
   at android.support.v7.widget.StaggeredGridLayoutManager.scrollBy(StaggeredGridLayoutManager.java:1846)
   at android.support.v7.widget.StaggeredGridLayoutManager.scrollVerticallyBy(StaggeredGridLayoutManager.java:1764)
   at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:3062)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803)
   at android.view.Choreographer.doCallbacks(Choreographer.java:603)
   at android.view.Choreographer.doFrame(Choreographer.java:572)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789)
   at android.os.Handler.handleCallback(Handler.java:733)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:157)
   at android.app.ActivityThread.main(ActivityThread.java:5335)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
   at dalvik.system.NativeStart.main(NativeStart.java)

我不知道发生了什么。我想也许我在布局管理器之前设置了适配器,但不,事实并非如此。

我希望有人可以对此有所了解。

提前致谢!

更新:

我正在从我的应用程序中复制一些与 RecyclerView 相关的代码。

此代码来自片段:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    RecyclerView.LayoutManager layout = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL)

    mRecyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);
    mRecyclerView.setLayoutManager(layout);
    mRecyclerView.setAdapter(mAdapter);
}

这是来自适配器,特别是设置适配器项的方法:

public void setItems(List<String> items) {
    mItems.clear();
    mItems.addAll(items);

    notifyDataSetChanged();
}
4

2 回答 2

0

好吧,看起来像在 onCreateView() 中设置布局管理器和适配器解决了大多数设备中的问题。不知道会发生什么。

我仍然收到非常相似的崩溃报告,但现在只来自奇怪的品牌。

我希望这些信息可以在未来对其他开发者有所帮助。

更新

仍然获得大量相同的崩溃报告。这根本不能被认为是固定的:/

我将继续寻找解决方案,并可能创建一个受此问题影响的示例项目。

于 2015-03-27T18:07:01.873 回答
0

我找到了一些解决此问题的方法,请查看我对问题跟踪器的评论

https://issuetracker.google.com/issues/188096921#comment4

于 2021-09-27T09:46:01.770 回答