制备:
RecyclerView
与RecyclerView.Adapter
绑定到SQLite Cursor
(通过ContentProvider
&& Loader)。RecyclerView
并根据设计建议RecyclerView.Adapter
与之联系。
与建立。SelectionTracker
SelectionTracker
StableIdKeyProvider
第一步-删除项目:
RecyclerViews
的项目用长按(欢呼SelectionTracker
的SelectionObserver
),绘制操作栏右键菜单,消防删除操作,执行SQL删除任务。restartLoader
调用进行Cursor Loader更新。onLoadFinished
触发,新Cursor
获得,调用RecyclerView.Adapter
方法notifyDataSetChanged
。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)
删除项目进行中时,我在第一步中看到的内容。在StableIdKeyProvider
对onDetached
ViewHolder
item …