I'm using a cursor loader with the RecyclerView
, and everything else works just fine except every time I remove an item from the RecyclerView, the last item blinks, like this
мой код для удаления
public void deleteData(long id){
Uri uri = ContentUris.withAppendedId(URI, id);
getContentResolver().delete(uri, null, null);
}
код при свайпе:
deleteData(viewHolder.getItemId());
обратите внимание, что у меня есть другая активность, которая использует тот же код RecyclerAdapter
, ContentProvider
и макета, даже большинство реализаций и подходов к методам одинаковы, но этот работает отлично без каких-либо миганий, так что это довольно странная ситуация для меня.
Есть ли конкретная причина, которая может вызвать эту проблему? Я уже пытался отключить анимацию, например
recyclerView.getItemAnimator().setChangeDuration(0);
or
((DefaultItemAnimator) recyclerViewObject.getItemAnimator()).setSupportsChangeAnimations(false);
Но ничего из этого не сработало, не говоря уже о том, что я хочу, чтобы анимация работала.
Изменить: Загрузка контрольных точек:
при создании:
"main@4668" prio=5 tid=0x2 nid=NA runnable java.lang.Thread.State: RUNNABLE на com.jackz314.todo.HistoryActivity.onCreateLoader(HistoryActivity.java:803) на android.support.v4.app. LoaderManagerImpl.createLoader(LoaderManager.java:539) в android.support.v4.app.LoaderManagerImpl.createAndInstallLoader(LoaderManager.java:548) в android.support.v4.app.LoaderManagerImpl.initLoader(LoaderManager.java:603) в com .jackz314.todo.HistoryActivity.displayAllNotes(HistoryActivity.java:394) в com.jackz314.todo.HistoryActivity.deleteExpiredNotes(HistoryActivity.java:767) в com.jackz314.todo.HistoryActivity.onCreate(HistoryActivity.java:129)< br> в android.app.Activity.performCreate(Activity.java:6975) в android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) в android. app.ActivityThread.handleLaunchActivity(ActivityThr ead.java:2892) в android.app.ActivityThread.-wrap11(ActivityThread.java:-1) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
в android.os.Handler. dispatchMessage(Handler.java:105) в android.os.Looper.loop(Looper.java:164) в android.app.ActivityThread.main(ActivityThread.java:6541) в java.lang.reflect.Method.invoke(метод .java:-1) в com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
onDelete (удалить элемент):
"main@4668" prio=5 tid=0x2 nid=NA runnable java.lang.Thread.State: RUNNABLE на com.jackz314.todo.HistoryActivity.deleteData(HistoryActivity.java:791) на com.jackz314.todo.HistoryActivity$4 .onSwiped(HistoryActivity.java:434) в android.support.v7.widget.helper.ItemTouchHelper$4.run(ItemTouchHelper.java:686) в android.os.Handler.handleCallback(Handler.java:789) в android.os .Handler.dispatchMessage(Handler.java:98) в android.os.Looper.loop(Looper.java:164) в android.app.ActivityThread.main(ActivityThread.java:6541) в java.lang.reflect.Method. вызывать (Method.java:-1) в com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Надеюсь, это поможет
Редактировать: после небольшого расследования я обнаружил, что последний элемент на самом деле не мигал, кажется, что RecyclerView
сначала изменил свою длину/размер, отрезал раздел, который имеет такой же размер, как и удаленный элемент (удаление), чтобы последний элемент (в зависимости от размера удаляемого элемента) не был виден некоторое время, а затем RecyclerView
удаляет элемент, который должен быть удален в начале. Я все еще работаю над этим, пытаясь понять, потому ли это, что я где-то напутал порядок, или это какая-то другая причина.
cursorLoader
, и поэтому это так меня сбивает с толку. Попозже попробую ваш метод, спасибо. - person Jack   schedule 18.09.2017ListActivity.removeListRow(position)
? Я подумал, что это может решить проблему, но не знаю, как именно это работает. - person Jack   schedule 19.09.2017