我正在使用Room RecyclerView,如下所述:https://codelabs.developers.google.com/codelabs/android-room-with-a-view/
然后我添加了"left swipe"列表元素的删除,如下所述:https://www.androidhive.info/2017/09/android-recyclerview-swipe-delete-undo-using-itemtouchhelper/
它可以工作,但是当我从列表中删除它后从数据库中删除该项目时,滚动列表以填充空白空间的动画不再起作用:
(excerpt from ListFragment)
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position)
{
if (viewHolder instanceof mdcPointListAdapter.mdcPointViewHolder)
{
mdcPointListAdapter pointListAdapter = ((mdcPointListAdapter) (recyclerView.getAdapter()));
List<mdcPoint> mdcPoints = pointListAdapter.getPoints();
// get the removed item name to display it in snack bar
String name = mdcPoints.get(viewHolder.getAdapterPosition()).toString();
// backup of removed item for undo purpose
final mdcPoint deletedItem = mdcPoints.get(viewHolder.getAdapterPosition());
final int deletedIndex = viewHolder.getAdapterPosition();
**// remove the item from recycler view
pointListAdapter.removeItem(viewHolder.getAdapterPosition());
// remove the item from database through the ViewModel linked to Room database
mPointViewModel.delete(deletedItem);**
// showing snack bar with Undo option
Snackbar snackbar = Snackbar
.make(mainLayout, name + " " + getString(R.string.removed_from_list), Snackbar.LENGTH_LONG);
snackbar.setAction(R.string.undo, view ->
{
// undo is selected, restore the deleted item
pointListAdapter.restoreItem(deletedItem, deletedIndex);
mPointViewModel.insert(deletedItem);
});
snackbar.setActionTextColor(Color.YELLOW);
snackbar.show();
}
}
相关部分是
// remove the item from recycler view
pointListAdapter.removeItem(viewHolder.getAdapterPosition());
// remove the item from database through the ViewModel linked to Room database
mPointViewModel.delete(deletedItem);
我的解释是,由于ListFragment "observes"数据库,只要用 mPointViewModel.delete 删除该项,它就会请求更新列表,并立即取消刚启动的动画 .
我还试图覆盖RecyclerView动画师的 onRemoveFinished 并将 mPointViewModel.delete 放在那里,但没有改变 .
我找到的唯一解决方法是延迟产生 mPointViewModel.delete 400毫秒的线程:在这种情况下动画结束,但这个解决方案似乎不太专业 .
有没有更合适的方法来实现这一目标?
谢谢 .