小编A. *_*rov的帖子

删除项目后,新选择时续订StableIdKeyProvider缓存和RecyclerView / SelectionTracker崩溃

制备:

RecyclerViewRecyclerView.Adapter绑定到SQLite Cursor(通过ContentProvider&& Loader)。RecyclerView并根据设计建议RecyclerView.Adapter与之联系。 与建立。SelectionTrackerSelectionTrackerStableIdKeyProvider

第一步-删除项目:

  1. 选择RecyclerViews的项目用长按(欢呼SelectionTrackerSelectionObserver),绘制操作栏右键菜单,消防删除操作,执行SQL删除任务。
  2. SQL删除结束后,通过
    restartLoader调用进行Cursor Loader更新。
  3. onLoadFinished触发,新Cursor获得,调用
    RecyclerView.Adapter方法notifyDataSetChanged
  4. RecyclerView.Adapter重新绘制RecyclerView内容,一切看起来都很好。

第二步-选择其他项目。崩溃:

java.lang.IllegalArgumentException
    at androidx.core.util.Preconditions.checkArgument(Preconditions.java:38)
    at androidx.recyclerview.selection.DefaultSelectionTracker.anchorRange(DefaultSelectionTracker.java:269)
    at androidx.recyclerview.selection.MotionInputHandler.selectItem(MotionInputHandler.java:60)
    at androidx.recyclerview.selection.TouchInputHandler.onLongPress(TouchInputHandler.java:132)
    at androidx.recyclerview.selection.GestureRouter.onLongPress(GestureRouter.java:96)
    at android.view.GestureDetector.dispatchLongPress(GestureDetector.java:779)
    at android.view.GestureDetector.access$200(GestureDetector.java:40)
    at android.view.GestureDetector$GestureHandler.handleMessage(GestureDetector.java:293)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Run Code Online (Sandbox Code Playgroud)

删除项目进行中时,我在第一步中看到的内容。在StableIdKeyProvideronDetached ViewHolderitem …

android android-recyclerview

4
推荐指数
1
解决办法
781
查看次数

标签 统计

android ×1

android-recyclerview ×1