使用之前,先简单介绍一下这个SwipeRecyclerView,这是严大(严振杰)基于RecyclerView的进行修改和封装的高级RecyclerView,其可以实现像QQ聊天界面的侧滑删除菜单,和一些高级的功能,我这里也就不一一列举出来了

想要了解更多的同学,请看这一篇,作者写的http://blog.csdn.net/yanzhenjie1003/article/details/52115566

swiperecyclerview的Github官网:https://github.com/yanzhenjie/SwipeRecyclerView

前言:

之前开发APP的时候,我就是想使用像QQ聊天那样,有侧滑菜单,可以实现删除啊,置顶啊这些功能,我应该不用截图了,大家使用QQ都是知道的,但是,之前学习的时候才是刚入门,那个时候只懂得listview,我也找到了swiperecyclerview这个高级recyclerview,但是,我连recyclerview都没有学习,做了一个测试都没成功,于是便是放弃了,之后,学习到了recyclerview,懂了之后,再一看swiperecyclerview,简直一下子恍然大悟,于是便是开始使用,虽然说恍然大悟了,但是在实际开发中也是遇到了不少问题,一一解决之后,我便是来这写下一篇博客

使用步骤:

  1.添加依赖

    添加依赖 compile 'com.yanzhenjie:recyclerview-swipe:1.1.4'

  2.使用控件

    

  3.创建适配器类

    这里直接参考我写的recyclerview的使用,http://www.cnblogs.com/kexing/p/8045007.html,严大写的这个直接兼容,超级方便

  4.相关设置

    由于我实现的是侧滑菜单删除功能,这里就只写这个,默认你已经有了数据,我这里使用的litepal数据库与其一起使用,关于litepal的使用请看这一篇http://www.cnblogs.com/kexing/p/8127146.html

    贴出代码

  LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mRecyclerview.setLayoutManager(linearLayoutManager);//为swiperecyclerview设置布局管理器 //设置侧滑菜单
mRecyclerview.setSwipeMenuCreator(new SwipeMenuCreator() {
@Override
public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {
SwipeMenuItem deleteItem = new SwipeMenuItem(MainActivity.this)
.setBackground(R.drawable.check_button_bg)
.setImage(R.drawable.vector_drawable_delete)
.setHeight(ViewGroup.LayoutParams.MATCH_PARENT)//设置高,这里使用match_parent,就是与item的高相同
.setWidth(70);//设置宽
swipeRightMenu.addMenuItem(deleteItem);//设置右边的侧滑
}
});
//设置侧滑菜单的点击事件
mRecyclerview.setSwipeMenuItemClickListener(new SwipeMenuItemClickListener() {
@Override
public void onItemClick(SwipeMenuBridge menuBridge) {
menuBridge.closeMenu(); int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。0是左,右是1,暂时没有用到
int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。
int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。
Toast.makeText(MainActivity.this, "删除"+adapterPosition, Toast.LENGTH_SHORT).show();
}
});
mRecyclerview.setSwipeItemClickListener(new SwipeItemClickListener() {
@Override
public void onItemClick(View itemView, int position) {
Toast.makeText(MainActivity.this, "点击了"+position, Toast.LENGTH_SHORT).show();
}
});
mRecyclerview.setAdapter(new RecyclerViewAdapter(books));//设置adapter

我们慢慢分析,首先呢,就是与普通的recyclerview一样,设置线性的布局,这里我就不多说了

之后需要设置一个菜单管理器,setSwipeMenuCreator()这个方法,里面的参数是一个SwipeMenuCreator,没有的话我们就new一个,类似onClicklistener那样,直接在括号里面new就是匿名内部类使用,之后,我们就可以直接在里面使用代码生成我们的侧滑菜单,来看一下图片

当然,如果你不想用图标,使用setText方法就是单独的文字,具体大家可以自己尝试

接下来,我们需要设置删除的点击事件,直接调用setSwipeMenuItemClickListener,参数里也是new一个新的SwipeMenuItemClickListener类

这里,我们需要注意,先调用menuBridge的closeMenu(),这样可以防止监听状态的错误发生

可以看到,我在里面写了三个整型数据,这三个数据都是通过menuBridge的相关方法获取的,那这三个数据有什么用呢?

int direction = menuBridge.getDirection();

左侧还是右侧菜单。0是左,右是1,今天的使用暂时没有用到

int adapterPosition = menuBridge.getAdapterPosition();

RecyclerView的Item的position,删除功能的时候,就是需要你将该item删除,这个时候就会用到这个数据,从而判断出用户点击了删除后对应的那一个item
int menuPosition = menuBridge.getPosition();

菜单在RecyclerView的Item中的Position,当侧滑菜单中不止一个item,还有其他的什么置顶啊,这个时候就需要这个数据

你就可以判断用户点击的是哪一个菜单,从而实现相应的功能,从你滑出的那个侧滑菜单从左到右算起,最左边为0

最后,setSwipeItemClickListener,就是设置item的点击监听器,如果看过我之前写的那一篇recyclerview的使用,应该知道,我是在adapter里面实现的item的点击事件

这里,swiperecyclerview就直接设置了,就不用到adapter里面中去设置了

好了,到这里就行了吗?其实还不行,我在测试的时候就发现了,删除了一个item,swiperecyclerview并没有实时更新,经过一番摸索终于死找到了解决问题的办法

我们需要在我们定现删除的方法中添加下面代码

       temp = equipmentResults.get(position);//由position找到list集合中的对象
     DataSupport.deleteAll(EquipmentResult.class,"name = ? and type = ?",temp.getName(),temp.getType());//执行删除,litepal数据库的删除方法
equipmentResults.remove(temp);//从list中移出需要删除的那个对象
mMrecyclerview.setAdapter(new mRecyclerViewAdatper(equipmentResults));//重新设置adapter

我的代码供大家参考,有个思路就行了

PS:删除建议加个对话框,以免用户不小心操作

Android开发——使用高级的RecyclerView实现侧滑菜单删除功能(SwipeRecyclerView)的更多相关文章

  1. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  2. Android DrawerLayout 高仿QQ5.2双向侧滑菜单

    1.概述 之前写了一个Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭 ,恰逢QQ5.2又加了一个右侧菜单,刚好看了下DrawerLayout,一方面官方的东西,我都比较感兴趣:另一方面 ...

  3. Android开发技巧——使用PopupWindow实现弹出菜单

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

  4. Android开发技巧——实现可复用的ActionSheet菜单

    在上一篇<Android开发技巧--使用Dialog实现仿QQ的ActionSheet菜单>中,讲了这种菜单的实现过程,接下来将把它改成一个可复用的控件库. 本文原创,转载请注明出处: h ...

  5. Android笔记(五十二) 侧滑菜单SlidingMenu

    SlidingMenu是一个优秀的开源项目,可以实现侧滑菜单,简单介绍一下这SlidingMenu的使用: 常用属性和方法: setTouchModeAbove(int i )是否可以通过滑动手势打开 ...

  6. 利用开源SlidingMenu框架实现左右侧滑菜单的功能

    package com.loaderman.slidingmenudemo; import android.os.Bundle; import android.support.v4.app.Fragm ...

  7. Android开发学习之路-RecyclerView使用初探

    在进行一些MaterialDesign规范开发的时候,比如之前说到的CoordinateLayout实现的向上折叠效果的时候,如果依然使用ListView,那么这种效果是做不出来的,因为ListVie ...

  8. Android开发中如何使用RecyclerView

    介绍 在Android应用程序中,只要您想显示数据列表,就可以使用 RecyclerView . 早期的Android提供 ListView 了同样的东西. RecyclerView 可以被认为是一个 ...

  9. Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析

    这是关于RecyclerView的第二篇,说的是如何自定义Item动画,但是请注意,本文不包含动画的具体实现方法,只是告诉大家如何去自定义动画,如何去参考源代码. 我们知道,RecyclerView默 ...

随机推荐

  1. Golang学习--TOML配置处理

    上一篇文章中我们学会了使用包管理工具,这样我们就可以很方便的使用包管理工具来管理我们依赖的包. 配置工具的选择 但我们又遇到了一个问题,一个项目通常是有很多配置的,比如PHP的php.ini文件.Ng ...

  2. 解决EJB本地调用“java.lang.ClassCastException: $Proxy96 cannot be cast to com.tgb.ejb.UserManager”异常

    EJB本地调用方式:把Webclient和EJB服务端部署到同一个JBoss,client和server通过一个JVM进行通信. Web客户端本地调用时.需引用EJB服务端打包的jar,不需引用JBo ...

  3. JavaScript面向对象编程(9)高速构建继承关系之整合原型链

    前面我们铺垫了非常多细节.是为了让大家更加明晰prototype的使用细节: 如今能够将前面的知识整合起来,写一个函数用于高速构建基于原型链的继承关系了: function extend(Child, ...

  4. 时光轴三之 ExpandableListView版时光轴效果

    上两篇讲到了用listView和recyclerView来实现时光轴,这一篇我们用ExpandableListView来实现时光轴,废话不多说,直接来代码. 还是先activity_main.xml ...

  5. AVL树 & 重平衡概念

    AVL树是有平衡条件的二叉搜索树.这个平衡条件必须容易保持,而且需要保证树的深度是O(logN). AVL=BBST 作为二叉搜索树的最后一部分,我们来介绍最为经典的一种平衡二叉搜索树:AVL树.回顾 ...

  6. Win32界面 主函数分析

    WinMain即(函数运行入口): p { margin-bottom: 0.25cm; line-height: 120% } int WINAPI WinMain (HINSTANCE hinst ...

  7. 解决 ASP.NET Core MySql varchar 字符串截取(长度 255)

    ASP.NET Core 中使用 MySql,如果字段类型为varchar,不管设置多少长度,插入或更新数据的时候,会自动截断(截取 255 长度的字符). 出现问题的原因,就是使用了MySql.Da ...

  8. iOS开发解决json串中的NSNull类型

    后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串.下面是转化方法: 1 自定义的几个方法:放 ...

  9. 如何优雅地在React项目中使用Redux

    前言 或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处,本文不会安利大家使用Redux 概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与 ...

  10. webpack加载多级依赖时css、html文件不能正确resolve的问题

    在使用webpack+avalon以及avalon的mmRouter做SPA的时候,碰到一个困扰数周的问题:webpack加载多级依赖时出现了css文件和模板(html)文件不能正确resolve.原 ...