我收到了一些关于NullPointerException在StaggeredGridLayoutManager发生的坠机报告。看来我的用户中大约有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();
}发布于 2015-03-27 18:07:01
看起来,在onCreateView()中设置布局管理器和适配器解决了大多数设备中的问题。不知道会发生什么。
我仍然得到非常类似的坠机报告,但现在只从奇怪的品牌。
我希望这一信息可以帮助其他发展中国家在未来。
更新
仍然得到了同样数量的坠机报告。这一点根本不能视为固定的:/
我将继续寻找一个修复程序,并可能创建一个受此问题影响的示例项目。
发布于 2021-09-27 09:46:01
我为这个问题找到了一些解决办法,看看我对问题跟踪器的评论。
https://stackoverflow.com/questions/29288665
复制相似问题