在RecyclerView和自定义Adapter中,当元素位置发生改变时,我们需要执行以下步骤来更新UI:
例如,我们有一个包含数据对象的列表,我们可以使用以下方法来交换数据对象的位置:
public void swapItems(int fromPosition, int toPosition) {
Collections.swap(dataList, fromPosition, toPosition);
notifyItemMoved(fromPosition, toPosition);
}
例如,在RecyclerView上设置以下代码:
ItemTouchHelper.SimpleCallback simpleCallback = new
ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder,
@NonNull RecyclerView.ViewHolder target) {
adapter.swapItems(viewHolder.getAdapterPosition(),
target.getAdapterPosition());
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder,
int direction) {
// do nothing
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
itemTouchHelper.attachToRecyclerView(mRecyclerView);
这将设置一个简单的侦听器,以处理上下滑动手势。当拖动项时,onMove()
方法被调用,它调用我们在Adapter中定义的swapItems()
方法。
通过上述步骤,我们可以在RecyclerView和自定义Adapter中实现元素位置改变的效果。