titanium-sdk icon indicating copy to clipboard operation
titanium-sdk copied to clipboard

Android: warning in ListView TiRecyclerViewAdapter

Open m1ga opened this issue 1 year ago • 0 comments

Description

Implementing a lazy load in a ListView and received the following warning:

[WARN]  RecyclerView: Cannot call this method in a scroll callback. Scroll callbacks mightbe run during a measure & layout pass where you cannot change theRecyclerView data. Any method call that might change the structureof the RecyclerView or the adapter contents should be postponed tothe next frame.
[WARN]  RecyclerView: java.lang.IllegalStateException:  ti.modules.titanium.ui.widget.listview.TiNestedRecyclerView{5e38a81 VFED.V... ......ID 0,0-1080,1534}, adapter:ti.modules.titanium.ui.widget.listview.ListViewAdapter@6db7726, layout:ti.modules.titanium.ui.widget.listview.TiListView$1@7237f67, context:android.view.ContextThemeWrapper@b98d114
[WARN]  RecyclerView:   at androidx.recyclerview.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:3195)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.RecyclerView$RecyclerViewDataObserver.onItemRangeRemoved(RecyclerView.java:5728)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.RecyclerView$AdapterDataObservable.notifyItemRangeRemoved(RecyclerView.java:12694)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.RecyclerView$Adapter.notifyItemRangeRemoved(RecyclerView.java:7755)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.AdapterListUpdateCallback.onRemoved(AdapterListUpdateCallback.java:48)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.BatchingListUpdateCallback.dispatchLastEvent(BatchingListUpdateCallback.java:64)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.BatchingListUpdateCallback.onInserted(BatchingListUpdateCallback.java:82)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.DiffUtil$DiffResult.dispatchUpdatesTo(DiffUtil.java:947)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.DiffUtil$DiffResult.dispatchUpdatesTo(DiffUtil.java:840)
[WARN]  RecyclerView:   at ti.modules.titanium.ui.widget.listview.TiRecyclerViewAdapter.update(TiRecyclerViewAdapter.java:126)
[WARN]  RecyclerView:   at ti.modules.titanium.ui.widget.listview.TiListView.update(TiListView.java:760)
[WARN]  RecyclerView:   at ti.modules.titanium.ui.widget.listview.ListViewProxy.update(ListViewProxy.java:945)
[WARN]  RecyclerView:   at ti.modules.titanium.ui.widget.listview.ListSectionProxy.update(ListSectionProxy.java:487)
[WARN]  RecyclerView:   at ti.modules.titanium.ui.widget.listview.ListSectionProxy.update(ListSectionProxy.java:492)
[WARN]  RecyclerView:   at ti.modules.titanium.ui.widget.listview.ListSectionProxy.updateItemAt(ListSectionProxy.java:511)
[WARN]  RecyclerView:   at org.appcelerator.kroll.runtime.v8.V8Object.nativeFireEvent(Native Method)
[WARN]  RecyclerView:   at org.appcelerator.kroll.runtime.v8.V8Object.fireEvent(V8Object.java:63)
[WARN]  RecyclerView:   at org.appcelerator.kroll.KrollProxy.doFireEvent(KrollProxy.java:985)
[WARN]  RecyclerView:   at org.appcelerator.kroll.KrollProxy.fireSyncEvent(KrollProxy.java:819)
[WARN]  RecyclerView:   at org.appcelerator.titanium.proxy.TiViewProxy.fireSyncEvent(TiViewProxy.java:1037)
[WARN]  RecyclerView:   at org.appcelerator.titanium.proxy.TiViewProxy.fireSyncEvent(TiViewProxy.java:1043)
[WARN]  RecyclerView:   at ti.modules.titanium.ui.widget.listview.TiListView$2.onScrolled(TiListView.java:161)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.RecyclerView.dispatchOnScrolled(RecyclerView.java:5347)
[WARN]  RecyclerView:   at androidx.recyclerview.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:5512)
[WARN]  RecyclerView:   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231)
[WARN]  RecyclerView:   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239)
[WARN]  RecyclerView:   at android.view.Choreographer.doCallbacks(Choreographer.java:899)
[WARN]  RecyclerView:   at android.view.Choreographer.doFrame(Choreographer.java:827)
[WARN]  RecyclerView:   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214)
[WARN]  RecyclerView:   at android.os.Handler.handleCallback(Handler.java:942)
[WARN]  RecyclerView:   at android.os.Handler.dispatchMessage(Handler.java:99)
[WARN]  RecyclerView:   at android.os.Looper.loopOnce(Looper.java:201)
[WARN]  RecyclerView:   at android.os.Looper.loop(Looper.java:288)
[WARN]  RecyclerView:   at android.app.ActivityThread.main(ActivityThread.java:7898)
[WARN]  RecyclerView:   at java.lang.reflect.Method.invoke(Native Method)
[WARN]  RecyclerView:   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
[WARN]  RecyclerView:   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

source https://github.com/tidev/titanium_mobile/blob/f80e1dc35b7e1d8795fd096db2b350fddc94e88c/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/TiRecyclerViewAdapter.java#L126

Everything still works fine. Have to see if it's my implementation or if I can fix it in the SDK.

I add a new ListItem with "loading..." at the end when I start the lazy-load. Trying to create an example

Steps to reproduce

not yet

Platform

Android

SDK version you are using

11.1.0

m1ga avatar Aug 18 '22 16:08 m1ga