重新排序 Android 回收站视图中的项目后,位置没有更新
After reordering the items in Android recycler view the position is not updating
在我的应用程序中,我在回收站视图中显示了一个按钮列表,在 ItemTouchHelper.SimpleCallback 的帮助下,onMove 函数让我能够对按钮重新排序,但重新排序后位置没有更新。例如:-(如果我将 button1 从 0 位置拖到 1 位置,那么 button1 应该显示它的新位置是 1,但它显示的是旧位置,即 0)是否有任何变化,以便
我可以访问它并了解我的按钮的新位置。
任何帮助将不胜感激。
ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP
| ItemTouchHelper.DOWN | ItemTouchHelper.START | ItemTouchHelper.END , 0) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
int fromPosition = viewHolder.getAdapterPosition();
int toPosition = target.getAdapterPosition();
Collections.swap(datalist,fromPosition,toPosition);
recyclerView.getAdapter().notifyItemMoved(fromPosition,toPosition);
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
}
};
我通过通知适配器中的整个数据集解决了这个问题:
Collections.swap(datalist,fromPosition,toPosition);
recyclerView.getAdapter().notifyItemMoved(fromPosition,toPosition);
recyclerView.getAdapter().notifyDataSetChanged()
return false;
这应该根据他们的新更新视图 position.This 是项目更改事件,而不是结构更改事件。它表明位置处数据的任何反映都已过时,应进行更新。
recyclerView.getAdapter().notifyDataSetChanged();
在我的应用程序中,我在回收站视图中显示了一个按钮列表,在 ItemTouchHelper.SimpleCallback 的帮助下,onMove 函数让我能够对按钮重新排序,但重新排序后位置没有更新。例如:-(如果我将 button1 从 0 位置拖到 1 位置,那么 button1 应该显示它的新位置是 1,但它显示的是旧位置,即 0)是否有任何变化,以便 我可以访问它并了解我的按钮的新位置。 任何帮助将不胜感激。
ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP
| ItemTouchHelper.DOWN | ItemTouchHelper.START | ItemTouchHelper.END , 0) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
int fromPosition = viewHolder.getAdapterPosition();
int toPosition = target.getAdapterPosition();
Collections.swap(datalist,fromPosition,toPosition);
recyclerView.getAdapter().notifyItemMoved(fromPosition,toPosition);
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
}
};
我通过通知适配器中的整个数据集解决了这个问题:
Collections.swap(datalist,fromPosition,toPosition);
recyclerView.getAdapter().notifyItemMoved(fromPosition,toPosition);
recyclerView.getAdapter().notifyDataSetChanged()
return false;
这应该根据他们的新更新视图 position.This 是项目更改事件,而不是结构更改事件。它表明位置处数据的任何反映都已过时,应进行更新。
recyclerView.getAdapter().notifyDataSetChanged();