gpt4 book ai didi

android - 使用 RecyclerView 在列表中滑动以删除

转载 作者:太空狗 更新时间:2023-10-29 13:14:44 26 4
gpt4 key购买 nike

我正在尝试在我的 recyclerview 中获得滑动删除功能。我正在使用 ItemTouchHelper.SimpleCallbackonSwiped() 方法。
当我使用 adapter.notifyItemRemoved() 方法时,我得到了滑动动画,并且滑动的行折叠了。我检查了行数据是否已从数据库中删除。但是,删除的行再次重新生成并显示在 recyclerview 的相同位置。

  @Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {

ListOfItemsRecyclerViewCursorAdapter adapter = (ListOfItemsRecyclerViewCursorAdapter) rv.getAdapter();

int position = viewHolder.getAdapterPosition();
long itemIdToBeRemoved = rv.getAdapter().getItemId(position);

//Deletes the item from sqlite database
mDBManager.deleteItem(itemIdToBeRemoved);

adapter.notifyItemRemoved(position);

// Using notifyItemRangeChanged, the swiped row does not collapse, but stays as a blank row.
adapter.notifyItemRangeChanged(position, adapter.getItemCount());

//adapter.notifyDataSetChanged();
//Tried the following - but did not work
//getLoaderManager().initLoader(1, null, ListOfItemsFragment.this);

}

看到其他一些 SO 问题,我尝试使用 adapter.notifyItemRangeChanged() 方法,但这会停止该行的折叠动画,只留下一个空白行。 Blank row on swipe

我正在使用加载器从 SQLite 数据库加载适配器的游标。所以我也尝试调用 initloader() 方法,但也没有用。

你能帮我解决这个问题吗?我曾尝试在 Stack Overflow 上搜索解决方案,但未能解决问题。

谢谢

最佳答案

我假设您的适配器 中有某种列表 数据。如果是,删除被删除行对应位置的item。

此外,尝试调用 viewHolder.setIsRecyclable(false);

您的 onSwiped 应该看起来像这样:

@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// your original stuff here, db deletion etc.
// don't forget to delete the data inside the adapter
viewHolder.setIsRecyclable(false);
adapter.notifyItemRemoved(pos);
}

根据您的评论,您正在使用 this adapter ?如果是这样,我认为您还需要调用 swapCursorchangeCursor。你见过this question吗?

此外,在您的问题中,您还使用了 adapter.notifyItemRangeChangedadapter.notifyItemRemoved 应该足够了。

关于android - 使用 RecyclerView 在列表中滑动以删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36149484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com