类似 Gmail 的 Android 5 RecyclerView

标签 android android-listview material-design android-recyclerview

我在玩 RecyclerView,我发现没有太多关于如何玩它的文档

我从文档中看到 GMail 应用程序正在使用 RecyclerView,但在该应用程序中它具有许多普通 RecyclerView 不支持的功能:

里面有截图

https://developer.android.com/training/material/lists-cards.html

特点:

  1. 列表项在onTouch时高亮显示
  2. 左右滑动删除

我可以知道如何实现这些功能吗?

我发现有一个关于如何实现 OnClickListener 的讨论,(这些解决方案非常缓慢,因为它不断检查列表项区域)

RecyclerView onClick

但是,如果将它与 Gmail 应用程序进行比较,它又快又流畅!

我可以知道如何实现上述 2 个功能吗?他们是如何做到的呢?他们使用的是 Recyclerview 还是 ListView?

我确信我可以使用 ListView 实现这些功能,但我不知道如何使用 Recyclerview 实现它们。

最佳答案

可以通过这种方式向左/向右滑动: Swipe with ItemTouchHelper - jmcdale's answer

Android 支持库中开箱即用的 SwipeToDismiss。

  1. 将 'recyclerview-v7:22.2.+' 依赖添加到 build.gradle:

    编译'com.android.support:recyclerview-v7:22.2.+'

  2. 将 remove 方法添加到您的 RecyclerView.Adapter 实现中:

    public class ExampleAdapter extends Adapter<ExampleItem> {
        [...]
        public void remove(int position) {
            list.remove(position);
            notifyItemRemoved(position);
        }
    
    }
    
  3. 使用 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);
    
  4. 将 ItemTouchHelper 附加到 RecyclerView

    itemTouchHelper.attachToRecyclerView(recyclerView);
    

另一个有用的链接:Drag and swipe with recyclerView

关于类似 Gmail 的 Android 5 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27855401/

相关文章:

angularjs - Angular.js md-autocomplete 不起作用

Android波浪动画

android - 如何使用 textview/edittext 而不是图像创建灵活的空间标题?

android - fragment 内的 getSupportFragmentManager() fragment 内

Android EditText 在 ListView 中滚动时丢失内容

Android 5 屏幕故障/静态与 Viewpager 内的 Google map fragment

android - ListView性能和列表项的顺序android

android - 检测何时从 Android ListView 中删除 View

android - android gradle 插件 3.5.0 更新失败

android - 如何设置对话框的宽度?