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