我在玩 RecyclerView,我发现没有太多关于如何玩它的文档
我从文档中看到 GMail 应用程序正在使用 RecyclerView,但在该应用程序中它具有许多普通 RecyclerView 不支持的功能:
里面有截图
https://developer.android.com/training/material/lists-cards.html
特点:
- 列表项在onTouch时高亮显示
- 左右滑动删除
我可以知道如何实现这些功能吗?
我发现有一个关于如何实现 OnClickListener 的讨论,(这些解决方案非常缓慢,因为它不断检查列表项区域)
但是,如果将它与 Gmail 应用程序进行比较,它又快又流畅!
我可以知道如何实现上述 2 个功能吗?他们是如何做到的呢?他们使用的是 Recyclerview 还是 ListView?
我确信我可以使用 ListView 实现这些功能,但我不知道如何使用 Recyclerview 实现它们。
最佳答案
可以通过这种方式向左/向右滑动: Swipe with ItemTouchHelper - jmcdale's answer
Android 支持库中开箱即用的 SwipeToDismiss。
将 'recyclerview-v7:22.2.+' 依赖添加到 build.gradle:
编译'com.android.support:recyclerview-v7:22.2.+'
将 remove 方法添加到您的 RecyclerView.Adapter 实现中:
public class ExampleAdapter extends Adapter<ExampleItem> { [...] public void remove(int position) { list.remove(position); notifyItemRemoved(position); } }
使用 ItemTouchHelper 和 ItemTouchHelper.Callback:
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) { //Remove swiped item adapter.remove(viewHolder.getAdapterPosition()) } @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { //Available drag and drop directions int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; //Available swipe directions int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; return makeMovementFlags(dragFlags, swipeFlags); } //Disable or Enable drag and drop by long press @Override public boolean isLongPressDragEnabled() { //return false; return true; } //Disable or Enable swiping @Override public boolean isItemViewSwipeEnabled() { //return false; return true; } }; ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
将 ItemTouchHelper 附加到 RecyclerView
itemTouchHelper.attachToRecyclerView(recyclerView);
另一个有用的链接:Drag and swipe with recyclerView
关于类似 Gmail 的 Android 5 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27855401/