ItemTouchHelper
是 Android 中用于实现 RecyclerView 项目的拖动和滑动删除功能的工具类。当你尝试使用 ItemTouchHelper
从 RecyclerView
中移除项目时,如果遇到 UnsupportedOperationException
异常,通常是因为数据集(通常是 List
或 Array
)不支持修改操作。
Arrays.asList()
返回的列表)是不可修改的,尝试从中移除元素时会抛出此异常。如果你使用的是 Arrays.asList()
创建的列表,它返回的是一个固定大小的列表,不支持添加或删除操作。你可以将其转换为 ArrayList
来解决这个问题。
List<MyItem> items = new ArrayList<>(Arrays.asList(initialItems));
确保在移除项目后,适配器能够正确地通知 RecyclerView 数据已经改变。
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
items.remove(position);
adapter.notifyItemRemoved(position);
adapter.notifyItemRangeChanged(position, items.size());
}
创建一个 ItemTouchHelper.Callback
的实例,并在其中处理滑动删除的逻辑。
ItemTouchHelper.Callback callback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
items.remove(position);
adapter.notifyItemRemoved(position);
adapter.notifyItemRangeChanged(position, items.size());
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
itemTouchHelper.attachToRecyclerView(recyclerView);
这种功能常见于各种列表应用中,如邮件客户端、待办事项列表、新闻阅读器等,用户可以通过滑动项目来执行删除操作,提供直观便捷的用户体验。
UnsupportedOperationException
异常通常是由于尝试修改不可变的数据集引起的。通过确保使用可变的数据集,并且在移除项目后正确更新适配器,可以解决这个问题。使用 ItemTouchHelper
可以方便地为 RecyclerView 添加滑动删除的功能,提升应用的用户体验。
领取专属 10元无门槛券
手把手带您无忧上云