Android RecyclerViewSwipeDismiss:水平、垂直方向的拖曳删除item

RecyclerViewSwipeDismiss是一种支持RecyclerView的水平、垂直方向拖曳删除RecyclerView里面条目item的第三方开源项目,RecyclerViewSwipeDismiss在gitbub上的项目主页是:https://github.com/CodeFalling/RecyclerViewSwipeDismiss
我在以前写过类似的项目内容,最典型的就是腾讯QQ的消息列表,见附录文章1所简介,QQ的消息列表中某一个条目左滑以后会滑出一系列选项,比如删除、置顶等。同样,也有像附录文章2那样左滑右滑可以删除ListView内容的开源项目。
这篇文章要介绍的RecyclerViewSwipeDismiss,除了支持RecyclerView这个最新的“ListView”外,RecyclerViewSwipeDismiss还支持垂直方向的上滑/下滑,以及水平方向的左滑/右滑删除,这和附录文章1,2的开源项目相比较有其应用场景特色,假设有一个水平方向的RecyclerView,那么我可以设置成垂直方向的滑动删除;假设是一个垂直方向的RecyclerView,那么我可以设置成水平方向的左滑/右滑删除。
写一个简单的例子,测试的MainActivity.java:

package zhangphil.demo;import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;import java.util.LinkedList;
import java.util.List;import io.github.codefalling.recyclerviewswipedismiss.SwipeDismissRecyclerViewTouchListener;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);LinearLayoutManager horizontalLayoutManager = new LinearLayoutManager(this);horizontalLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);mRecyclerView.setLayoutManager(horizontalLayoutManager);List<String> data = new LinkedList<String>();for (int i = 0; i < 100; i++)data.add("数据:" + i);final MyAdapter adapter = new MyAdapter(data);mRecyclerView.setAdapter(adapter);SwipeDismissRecyclerViewTouchListener listener = new SwipeDismissRecyclerViewTouchListener.Builder(mRecyclerView,new SwipeDismissRecyclerViewTouchListener.DismissCallbacks() {@Overridepublic boolean canDismiss(int position) {return true;}@Overridepublic void onDismiss(View view) {int id = mRecyclerView.getChildPosition(view);adapter.data.remove(id);adapter.notifyDataSetChanged();Toast.makeText(getApplication(), String.format("删除 %d", id), Toast.LENGTH_SHORT).show();}}).setIsVertical(true) /**true为垂直方向拖曳删除,如果是false,那么是水平方向的拖曳删除*/.create();mRecyclerView.setOnTouchListener(listener);}public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {public List<String> data;public MyAdapter(List<String> data) {super();this.data = data;}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {View view = View.inflate(viewGroup.getContext(), android.R.layout.simple_list_item_1, null);MyViewHolder holder = new MyViewHolder(view);return holder;}@Overridepublic void onBindViewHolder(MyViewHolder viewHolder, int i) {viewHolder.mTextView.setText(data.get(i));}@Overridepublic int getItemCount() {return data.size();}}private class MyViewHolder extends RecyclerView.ViewHolder {public TextView mTextView;public MyViewHolder(View itemView) {super(itemView);mTextView = (TextView) itemView;}}
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"android:scrollbars="vertical" /></RelativeLayout>

运行结果:

在设计时候要注意一些常识,比如,如果设计的是一个水平的RecyclerView,那么比较自然的滑动删除方向是垂直的上滑/下滑;而如果是一个垂直方向的RecyclerView,那么比较自然的滑动删除方向是水平的左滑/右滑。RecyclerViewSwipeDismiss通过setIsVertical(boolean b)布尔值控制,true为垂直方向的上下滑动删除,false则是水平方向的左右滑动删除,开发者应该设计相配套的RecyclerView方向。

附录文章:
1,《Android SwipeMenuListView》链接地址:http://blog.csdn.net/zhangphil/article/details/46999127
2,《Android SwipeToDismiss:左滑/右滑删除ListView条目Item》链接地址:http://blog.csdn.net/zhangphil/article/details/47081863

转载于:https://www.cnblogs.com/hehehaha/p/6147315.html

Android RecyclerViewSwipeDismiss:水平、垂直方向的拖曳删除item相关推荐

  1. android 水平方向瀑布流,Android RecyclerView(瀑布流)水平/垂直方向分割线

     Android RecyclerView(瀑布流)水平/垂直方向分割线 Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现Recycle ...

  2. 如何用css实现一个盒子的水平垂直方向的居中

    1)先将元素通过top:50%和left:50%定位到页面的中心,然后再通过translate来调整元素的中心点到页面的中心.该方法需要考虑浏览器兼容问题 .parent {    position: ...

  3. html 怎么做分屏效果,纯css实现水平方向分屏和垂直方向分屏

    最近开发有这样一个需求,水平/垂直方向上的能够拖动.最开始采用操作dom的方式,但是卡顿现象明显,体验太差.思考问题是不是操作太频繁,导致卡顿,于是又尝试防抖与节流,效果还是不明显.突发想到,css有 ...

  4. 小div在大div里面水平垂直都居中的实现方法

    关于如何设置小盒子在大盒子里面水平垂直方向同时居中的实现方法有很多种,下面仅列举了常用的几种. 首先看一下要实现的效果图及对应的html代码: <div class="parent&q ...

  5. Android ViewDragHelper:控制子View能否拖曳及水平方向的拖曳边界(2)

     Android ViewDragHelper:控制子View能否拖曳及水平方向的拖曳边界(2) 附录文章1简单介绍了Android ViewDragHelper的使用,注意到附录文章1的代码运行 ...

  6. Flutter 布局Row(水平方向布局)、Column(垂直方向布局)、Wrap(可以自动换行的布局)、Flex(弹性布局)、Stack(叠层布局)、

    1.线性布局 Row 水平方向布局 Row({... //表示水平方向子组件的布局顺序(是从左往右还是从右往左),//默认为系统当前Locale环境的文本方向(如中文.英语都是从左往右,而阿拉伯语是从 ...

  7. Android TextView 带背景的文字垂直方向显示(ems属性)

    工具:Android Studio 在项目中有个这个需求:要求文字带背景,且文字是垂直方向显示的,竖着排,如图1. 图1  但是当我满怀欣喜地写入了这段代码之后: <TextView andro ...

  8. CSS中可以让文字在水平和垂直方向上重叠的两个属性

    垂直方向:line-height 水平方向:letter-spacing letter-spacing可以用于消除inline-block元素间的换行符空格间隙问题 转载于:https://www.c ...

  9. 利用flex弹性布局实现图片水平及垂直方向居中

    display:flex 是一种布局方式.它即可以应用于容器中,也可以应用于行内元素.是W3C提出的一种新的方案,可以简便.完整.响应式地实现各种页面布局 注意:(Flex是Flexible Box的 ...

最新文章

  1. syslog(),closelog()与openlog()--日志操作函数
  2. SAP WebService基础知识
  3. EntLib.com Forum – 开源ASP.NET论坛 v4.0(提供源码下载)
  4. PAT1001 A+B Format (20 分)
  5. 0710 mux协议的作用(ppp拨号时如何和gprs进行at指令交互)
  6. 发力公有云的用友YonSuite,云原生实力到底如何?
  7. 看不起胖子?自如员工爆料身高、体重决定能否晋升,官方回应侧面实锤?
  8. php 向ldap请求文件,绑定 LDAP 目录 - PHP 7 中文文档
  9. 孙鑫MFC笔记之十七--HOOK编程
  10. 苹果电脑驱动下载查询
  11. 使用Bartend提取K3领料数据以实现发料包装标识批量自动打印
  12. Swagger自动生成接口文档
  13. linuxmint/ubuntu修改主机名hostnam
  14. 什么是BI、ETL、DW
  15. 服务器能ping通,但是无法ssh
  16. 计算机编程教育现状,中小学生编程教育现状调查研究
  17. 解决.NET报错【80040154 没有注册类】的问题
  18. 精通CSS(5.6.3-end)PixyFairypureCSSToolHintscale
  19. Python大数据-电商产品评论情感数据分析
  20. 【每日一题】 643. 子数组最大平均数 I

热门文章

  1. 从ASP.NET的PHP执行速度比较谈起
  2. MDT2010-windows 7镜像捕获与模板镜像部署(二)(特别版)
  3. Android LruCache技术原理
  4. 腾讯安全上海游戏部门笔试题
  5. java SSL 简单操作demo
  6. Android,已知应用名称, 通过应用名称来启动应用
  7. 用动态规划解决最长公共子序列
  8. angular之$parse
  9. SharePoint 2013 托管导航及相关配置
  10. 如何应对冬季暴涨的体重