我正在尝试在recyclerview
中获取滑动到删除功能。我使用onSwiped()
的{{1}}方法
当我使用ItemTouchHelper.SimpleCallback
方法时,我得到了滑动动画,并且滑动的行会折叠。我检查了行数据从数据库中删除。但是,再次删除的行将重新生成并显示在同一位置的adapter.notifyItemRemoved()
上。
recyclerview
看到其他一些SO问题,我尝试使用适配器 @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);
}
方法,但这会停止该行的折叠动画,只留下一个空白行。
Blank row on swipe
我正在使用Loader从SQLite数据库加载适配器的游标。所以我也尝试调用.notifyItemRangeChanged()
方法,但这也没有用。
由于
答案 0 :(得分:1)
我假设您list
内有某种adapter
数据。如果是,请删除已删除行的相应位置上的项目。
另外,请尝试拨打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?如果是这样,我认为您还需要致电swapCursor
或changeCursor
。你看过this question吗?
此外,在您的问题中,您还使用adapter.notifyItemRangeChanged
,adapter.notifyItemRemoved
就足够了。
答案 1 :(得分:1)
使用
adapter.remove(viewHolder.getAdapterPosition());
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
//删除你的da条目然后......
Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
adapter.remove(viewHolder.getAdapterPosition());
// if I emptied the entire list...draw background
if( adapter.getItemCount()==0 ){
SwipeRefreshLayout refresh = (SwipeRefreshLayout) activity.findViewById(R.id.container);
refresh.setBackground( ContextCompat.getDrawable(activity, R.drawable.background_null) );
}
}
答案 2 :(得分:0)
你可以在github上看到这个例子:
https://github.com/nemanja-kovacevic/recycler-view-swipe-to-delete