0

I'm using leanback library: HorizontalGridView + ArrayObjectAdapter.

I know there are many other similar questions. The solution is to notify the adapter that there were changes.

But in my case even if I do notify the adapter, I still get this error while scrolling fast.

11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime: Process: com.example.app, PID: 25575
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime: java.lang.NullPointerException
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.support.v17.leanback.widget.GridLayoutManager.getOpticalLeft(GridLayoutManager.java:950)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.support.v17.leanback.widget.GridLayoutManager.getViewMin(GridLayoutManager.java:966)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.support.v17.leanback.widget.GridLayoutManager.access$3300(GridLayoutManager.java:50)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.support.v17.leanback.widget.GridLayoutManager$2.getEdge(GridLayoutManager.java:1518)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.support.v17.leanback.widget.Grid.removeInvisibleItemsAtEnd(Grid.java:385)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.support.v17.leanback.widget.GridLayoutManager.removeInvisibleViewsAtEnd(GridLayoutManager.java:1612)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.support.v17.leanback.widget.GridLayoutManager.scrollDirectionPrimary(GridLayoutManager.java:1979)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.support.v17.leanback.widget.GridLayoutManager.scrollHorizontallyBy(GridLayoutManager.java:1905)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:3773)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:772)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.view.Choreographer.doCallbacks(Choreographer.java:585)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.view.Choreographer.doFrame(Choreographer.java:554)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:758)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:733)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:136)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5017)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)
11-05 18:57:35.335 25575-25575/com.example.app E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

I update my adapter using the following code:

showsAdapter.addAll(showsAdapter.size(), day.getShows());

showsAdapter is an instance of ArrayObjectAdapter. Here's the addAll method of this class:

public void addAll(int index, Collection items) {
        int itemsCount = items.size();
        if (itemsCount == 0) {
            return;
        }
        mItems.addAll(index, items);
        notifyItemRangeInserted(index, itemsCount);
    }

So as you can see this method notifies the adapter.

What else can I do to fix this error or at least prevent the exception?

serg66
  • 1,148
  • 1
  • 17
  • 31
  • just notifyDataSetChanged – tiny sunlight Nov 05 '15 at 14:37
  • I can't use it. I have images in my `HorizontalGridView`, and when I'm updating the row with `notifyDataSetChanged`, there's unpleasent flickering. If I have to use it, then why is there `notifyItemRangeInserted` called if it doesn't work? – serg66 Nov 05 '15 at 17:37

0 Answers0