前几天写了一片关于RecyclerView滑动删除Item,RecyclerView长按拖拽Item的博客,本来很简单一个使用,阅读量还挺高的,原博客传送门。

今天介绍一个RecyclerView Item侧滑菜单,RecyclerView滑动删除Item,RecyclerView长按拖拽Item的开源项目,效果看下图,大家也可以下载演示apk具体操作体验下SwipeRecyclerView的强大。

需要说明的是,本库没有对RecyclerView做大的修改,只是ItemView的封装。看起来是对RecyclerView的修改,其实仅仅是为RecyclerView添加了使用的方法API而已。

今天的博客将完美解决这些问题:

RecyclerView侧滑菜单(左右两侧都可以添加)(List、Grid两种形式)。

RecyclerView长按拖拽Item(List、Grid两种形式)。

RecyclerView侧滑删除item(List、Grid两种形式)。

指定RecyclerView的某一个Item不能滑动删除或长按拖拽(List、Grid两种形式)。

根据Item的ViewType来决定显示的菜单。

用SwipeMenuLayout在任何地方都可以实现你自己的侧滑菜单。

SwipeRecyclerView的源码托管在Github:https://github.com/yanzhenjie...,欢迎Star。

如果不能打开Github,直接从CSDN上下载Demo。

效果图

如果网页加载速度慢,可以下载demo的apk看效果。

侧滑菜单

RecyclerView Item侧滑菜单。左右两侧都可以添加侧滑菜单,菜单Item包括图标、文字、点击背景颜色等。也可以根据Item的ViewType来决定某个Item的Menu的样子、类型等:

拖拽、侧滑菜单

RecyclerView Item长按后拖拽Item移动位置。同时支持Item长按拖拽、Item侧滑显示菜单。包括各种布局管理器,比如LinearLayoutManager、GridLayoutManager都完美支持:

拖拽、侧滑删除

可以指定某个Item不能被拖拽,指定某个Item不能被滑动删除:

引用方法

Eclipse 请自行下载源码。

AndroidStudio使用Gradle构建添加依赖(推荐)

compile 'com.yanzhenjie:recyclerview-swipe:1.0.0'

本库引用的RecyclerView版本如下:

compile 'com.android.support:recyclerview-v7:23.4.0'

使用介绍

这里列出关键实现,具体请参考demo,或者加我博客左侧的交流群或者关注我的公众微信一起来讨论。

实现原理

侧滑菜单使用自定义Layout实现,继承自FragmeLayout。

长按拖拽Item、滑动Item删除由ItemTouchHelper实现。

启用SwipeReyclerView的长按Item拖拽功能和侧滑删除功能

recyclerView.setLongPressDragEnabled(true);// 开启长按拖拽

recyclerView.setItemViewSwipeEnabled(true);// 开启滑动删除。

recyclerView.setOnItemMoveListener(onItemMoveListener);// 监听拖拽和侧滑删除,更新UI。

...

/**

* 当Item移动的时候监听。

*/

private OnItemMoveListener onItemMoveListener = new OnItemMoveListener() {

@Override

public boolean onItemMove(int fromPosition, int toPosition) {

// 当Item被拖拽的时候,交换Item的位置。

Collections.swap(mStrings, fromPosition, toPosition);

mMenuAdapter.notifyItemMoved(fromPosition, toPosition);

return true;

}

@Override

public void onItemDismiss(int position) {

// 当Item被滑动删除的时候,删除Item。

mStrings.remove(position);

mMenuAdapter.notifyItemRemoved(position);

Toast.show(mContext, "第" + position + "条被删除。");

}

};

添加Item侧滑菜单

侧滑菜单支持自动打开某个Item的菜单,并可以指定是左边还是右边的:

// 打开第一个Item的左侧菜单。

recyclerView.openLeftMenu(0);

// 打开第一个Item的右侧菜单。

recyclerView.openRightMenu(0);

第一步,引用自定义View:SwipeMenuReyclerView:

android:id="@+id/recycler_view"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:layout_behavior="@string/appbar_scrolling_view_behavior" />

第二步,设置菜单创建器、菜单点击监听:

SwipeMenuRecyclerView swipeMenuRecyclerView = findViewById(R.id.recycler_view);

// 设置菜单创建器。

swipeMenuRecyclerView.setSwipeMenuCreator(swipeMenuCreator);

// 设置菜单Item点击监听。

swipeMenuRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);

第三步,菜单创建器创建菜单:

/**

* 菜单创建器。在Item要创建菜单的时候调用。

*/

private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {

@Override

public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {

SwipeMenuItem addItem = new SwipeMenuItem(mContext)

.setBackgroundDrawable(R.drawable.selector_green)// 点击的背景。

.setImage(R.mipmap.ic_action_add) // 图标。

.setWidth(size) // 宽度。

.setHeight(size); // 高度。

swipeLeftMenu.addMenuItem(addItem); // 添加一个按钮到左侧菜单。

SwipeMenuItem deleteItem = new SwipeMenuItem(mContext)

.setBackgroundDrawable(R.drawable.selector_red)

.setImage(R.mipmap.ic_action_delete) // 图标。

.setText("删除") // 文字。

.setTextColor(Color.WHITE) // 文字颜色。

.setTextSize(16) // 文字大小。

.setWidth(size)

.setHeight(size);

swipeRightMenu.addMenuItem(deleteItem);// 添加一个按钮到右侧侧菜单。

}

};

第四步,继承SwipeMenuAdapter,和正常的Adapter一样使用:

public class MenuAdapter extends SwipeMenuAdapter {

@Override

public int getItemCount() {

return 0;

}

@Override

public View onCreateContentView(ViewGroup parent, int viewType) {

return null;

}

@Override

public ViewHolder onCompatCreateViewHolder(View realContentView, int viewType) {

return null;

}

@Override

public void onBindViewHolder(MenuAdapter.DefaultViewHolder holder, int position) {

}

}

就到这里,更多的细节,请参考Github上的demo和源码,源码demo下载传送门。

欢迎加入我的技术交流群:Android 愚公移山③ 547839514

欢迎关注我的公众号,长期不断推送优选博文、优秀开源项目,欢迎投稿:

android.support.v7 fragme,打造最强RecyclerView侧滑菜单,长按拖拽Item,滑动删除Item相关推荐

  1. Android 自定义View修炼-打造完美的自定义侧滑菜单/侧滑View控件(转)

    一.概述 在App中,经常会出现侧滑菜单,侧滑滑出View等效果,虽然说Android有很多第三方开源库,但是实际上 咱们可以自己也写一个自定义的侧滑View控件,其实不难,主要涉及到以下几个要点: ...

  2. 一次解决找不到 android.support.v7.XXX 问题

    对于类似以下错误 Error inflating class android.support.v7.widget.RecyclerView Didn't find class "androi ...

  3. Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView

    今天创建了一个 demo ,然后就是复制RecyclerView 过去, 到最后完成运行的时候发现 系统奔溃了, 然后 提示 Binary XML file line #8: Error inflat ...

  4. AndroidStudio中提示:Didn‘t find class “android.support.v7.widget.RecyclerView“

    场景 在Android Studio中使用Recycle View时提示: Didn't find class "android.support.v7.widget.RecyclerView ...

  5. int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null.....

    今天在做一个即时通讯回话列表时,遇到int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null..空指 ...

  6. android.support.v7.widget.,关于android.support.v7.widget.RecyclerView的使用,总是找不到类...

    各位高手求指导决,卡在这了,整了一个上午没搞定. log输出: 06-13 00:42:03.395: E/AndroidRuntime(1884): FATAL EXCEPTION: main 06 ...

  7. Didn't find class android.support.v7.widget.RecyclerView 解决办法 ———————————————— 版权声明:本文为CSDN博主「eag

    依赖记得加:implementation 'com.android.support:recyclerview-v7:28.0.0' 你的可能是这样的 <android.support.v7.wi ...

  8. android recyclerView Binary XML file line #7: Error inflating class android.support.v7.widget.Recycl

    Binary XML file line #7: Error inflating class android.support.v7.widget.RecyclerView 原来在eclipse中使用R ...

  9. LayoutManager android.support.v7.widget.LinearLayoutManager@6eb337f is already attached to a Recycl

    java.lang.IllegalArgumentException: LayoutManager android.support.v7.widget.LinearLayoutManager@6eb3 ...

最新文章

  1. 《数学之美》第21章 拼音输入法的数学原理
  2. GridView 控件的执行顺序
  3. 我的第一个微信好友分析
  4. 《敏捷可执行需求说明 Scrum提炼及实现技术》—— 1.2 识别不确定性的影响
  5. [转载] Java线程池框架源码分析
  6. java 工厂模式的写法_设计模式-工厂模式
  7. WebApi网关之Bumblebee和Ocelot性能对比
  8. 多主机Docker容器的VLAN划分
  9. MaskRCNN要点
  10. wpf label字体为斜体_快来收下这份字体设计必备知识点
  11. 基于JAVA+SpringBoot+Mybatis+MYSQL的体育馆开放管理系统
  12. 由 Apache 说开,中国开源项目已经走向世界!
  13. linux .deb后缀文件,tar.gz和bin,以及rpm,deb等linux后缀的文件的区别
  14. 英文书籍下载网站推荐
  15. .NET Reflector(.net反编译工具) v10.0.7.774 特别版(附破解步骤+注册机)
  16. java毕业生设计医院设备管理系统计算机源码+系统+mysql+调试部署+lw
  17. iOS 给控件View添加角标BadgeValue
  18. 计算机怎么把磁盘内存分给其他盘,怎么把未分配的内存分给d盘
  19. newifi路由器 php,newifi智能路由设置教程
  20. Cadence Allegro 17.4 IBS文件处理(IBIS模型)

热门文章

  1. 备忘(持续更新。。。)
  2. Swift iOS : 内存管理
  3. vs运行时候冒了这个错:无法启动IIS Express Web 服务器~Win10
  4. 关于 java 实现 语音朗读
  5. python代码风格检查工具──pylint
  6. SQL Server 性能优化之——系统化方法提高性能
  7. Oracle下的Databse,Instance,Schemas
  8. android5.1 sdk version,java - Android SDK version 23.6 - Stack Overflow
  9. python单词反转_python文本 字符串逐字符反转以及逐单词反转
  10. java clock计时_Java Clock类| 实例的Instant()方法