vcbous Posted November 5, 2020 Posted November 5, 2020 (edited) На форме лежит CollectionView. Открываю модальную форму с помощью TfgAnimationHelper. На ней также есть CV. Произвожу операции над данными (или не провожу). Закрываю ее и иногда приложение падает. Сначала я подумал, что виноват Callback, в котором я обновляю данные. Я закомментировал код в нем, но крэш не пропал. Вот что выдает adb logcat: 11-05 10:40:50.152: D/NativeListViewAdapter(9299): onViewRecycled 11-05 10:40:50.153: D/NativeListViewAdapter(9299): onViewRecycled 11-05 10:40:52.962: D/NativeListViewAdapter(9299): onViewRecycled 11-05 10:40:52.963: D/NativeListViewAdapter(9299): onBindViewHolder 11-05 10:40:54.655: D/NativeListViewAdapter(9299): onViewRecycled 11-05 10:40:54.656: D/NativeListViewAdapter(9299): onBindViewHolder 11-05 10:40:56.297: D/NativeListViewAdapter(9299): onViewRecycled 11-05 10:40:56.298: D/NativeListViewAdapter(9299): onBindViewHolder 11-05 10:40:58.023: D/AndroidRuntime(9299): Shutting down VM 11-05 10:40:58.024: E/AndroidRuntime(9299): FATAL EXCEPTION: main 11-05 10:40:58.024: E/AndroidRuntime(9299): Process: by.vcbrest.bloknot, PID: 9299 11-05 10:40:58.024: E/AndroidRuntime(9299): java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 9(offset:9).state:86 android.support.v7.widget.RecyclerView{1ac694f VFED..... ........ 0,0-1220,429}, adapter:ru.fgx.view.listview.NativeListViewAdapter@9918dc, layout:android.support.v7.widget.GridLayoutManager@ceacde5, context:android.view.ContextThemeWrapper@ed3a0ba 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5817) 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.support.v7.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:285) 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.support.v7.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:342) 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.support.v7.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:358) 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.support.v7.widget.GapWorker.prefetch(GapWorker.java:365) 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.support.v7.widget.GapWorker.run(GapWorker.java:396) 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.os.Handler.handleCallback(Handler.java:751) 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.os.Handler.dispatchMessage(Handler.java:95) 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.os.Looper.loop(Looper.java:154) 11-05 10:40:58.024: E/AndroidRuntime(9299): at android.app.ActivityThread.main(ActivityThread.java:6119) 11-05 10:40:58.024: E/AndroidRuntime(9299): at java.lang.reflect.Method.invoke(Native Method) 11-05 10:40:58.024: E/AndroidRuntime(9299): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 11-05 10:40:58.024: E/AndroidRuntime(9299): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Delphi 10.3.3, SDK 25.25, Android 7.1 зы. Сейчас попробовал отвязаться от данных на главной форме, заполнил статическими строками, крэш не ушел. Edited November 5, 2020 by vcbous
Administrators Viktor Akselrod Posted November 5, 2020 Administrators Posted November 5, 2020 Здравствуйте. Приложите, пожалуйста, минимальное демо, демонстрирующее проблему. Спасибо.
vcbous Posted November 5, 2020 Author Posted November 5, 2020 (edited) Я не на тот CV подумал, судя по всему. Стал было демку делать, и заметил, что в модальной форме в onHide грохаю данные. Вроде в этом причина. Пока не падает. Edited November 5, 2020 by vcbous
Administrators Yaroslav Brovin Posted November 7, 2020 Administrators Posted November 7, 2020 TfgCollectionView очень чувствителен к рассинхронизации данных. Другими словами, если вы что-то меняете в данных, но не сообщаете об этом компоненту, то он может бросать исключения, чтобы информировать, что его состояние не соответствует реальности. Обычно в таких случаях нужно обязательно вначале проверить, что вы информируете компонент обо всех изменениях в данных.
vcbous Posted November 12, 2020 Author Posted November 12, 2020 В 07.11.2020 в 17:08, Yaroslav Brovin сказал: TfgCollectionView очень чувствителен к рассинхронизации данных. Другими словами, если вы что-то меняете в данных, но не сообщаете об этом компоненту, то он может бросать исключения, чтобы информировать, что его состояние не соответствует реальности. Обычно в таких случаях нужно обязательно вначале проверить, что вы информируете компонент обо всех изменениях в данных. Я когда java ошибку гуглил, то встречал информацию про notifyDatasetChanged. У нас это ReloadItems?
Recommended Posts