DragSortListView是一个可以实现拖动排序的listview控件,是我看到的交互较为复杂的开源代码中不管是代码质量还是流畅性都最好的。

DragSortListView 简称DSLV,继承自listView,能实现拖动排序、滑动删除,主要用于这样的listview,音乐列表、收藏列表、清单列表等。他的主要特点如下:

1.干净利落的拖动效果,不会对界面的已有元素造成视觉上的干扰。

2.即使是在拖动的过程中,如果到了listview的上限边界,仍然能很流畅的滚动listview。

3.允许listview的每个子view高度不一致。

4.提供了startDrag()和stopDrag()公共方法,也就是你可以在任意地方控制拖动。

5.提供了能自定义floating View的接口。

DragSortListView 中有三个重要的概念:

1.数据排序。拖动排序能够重写排列list中的数据顺序,因为DragSortListView 并不知道你的数据具体是如何组织的,排序的是由你自己实现DragSortListView 提供的一些监听(Listener)接口来完成的。

2.拖动的开始于结束。startDrag()和stopDrag()分别实现开始与结束,但是一般拖动的效果都是借助于DragSortController来完成的。

3.浮动视图(floating view)。floating view的外观和行为是由实现了FloatViewManager 接口的类控制的。可以通过它将任何view展示出漂浮的效果。

DragSortListView可以直接定义在xml中,当然需要一些必要的属性。

Listener

DragSortListView说白了还是一个listview,因此需要listadapter来形成其所有的子项。DSLV额外的在listadapter中对子view做了排序工作,这主要是通过一些listener的回调来实现的。为DragSortListView注册listener有如下两种方式:

1.通过set*Listener的方式。

2.在自定义的ListAdapter中实现Listener的接口,当DragSortListView调用DragSortListView.setAdapter()的时候,DSLV

检测到那些接口被实现然后调用合适的set*Listener()

DragSortListView.DropListener

DragSortListView.DropListener只有一个回调函数

Java

public void drop(int from, int to)

1

public void drop(int from, int to)

当floating View被释放的时候,被调用,from表示这次拖动是从listview的哪个子view开始的,to表示拖动到哪里,下面是一个使用DropListener的例子:

Java

private DragSortListView.DropListener onDrop =

new DragSortListView.DropListener() {

@Override

public void drop(int from, int to) {

if (from != to) {

DragSortListView list = getListView();

String item = adapter.getItem(from);

adapter.remove(item);

adapter.insert(item, to);

list.moveCheckState(from, to);

Log.d("DSLV", "Selected item is " + list.getCheckedItemPosition());

}

}

};

private DragSortListView.DropListener onDrop =    new DragSortListView.DropListener() {        @Override        public void drop(int from, int to) {            if (from != to) {                DragSortListView list = getListView();                String item = adapter.getItem(from);                adapter.remove(item);                adapter.insert(item, to);                list.moveCheckState(from, to);                Log.d("DSLV", "Selected item is " + list.getCheckedItemPosition());            }        }    };

DragSortListView.RemoveListener

DragSortListView的主要功能是提供拖动排序,但是与此同时,它也实现了滑动删除的功能,当删除一个item的时候removerListener将会调用它的remove方法:

Java

public void remove(int which)

public void remove(int which)

参数which表示被删除的是listview的哪个item。

DragSortListView.DragListener

DragListener的回调函数为:

Java

public void drag(int from, int to)

1

public void drag(int from, int to)

当拖动一个item到任何一个候选的目的位置(item)上方时DragListener都会调用其drag()方法。这个listener主要是监听拖动过程中经过了那些item,可以理解为监听拖动路径。

DragSortListView.DragSortListener

这个listener的作用是综合上述所有listener。

FloatViewManager

顾名思义FloatViewManager接口用于管理floatView,他处理floating View的创建,更新以及销毁。通过DSLV的setFloatViewManager()传递给DSLV。

FloatViewManager的例子程序可以在参考SimpleFloatViewManager类。

github 网址https://github.com/bauerca/drag-sort-listview

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

android程序设计排序方法,Android编程之可以实现拖动排序的listview控件相关推荐

  1. VB 单击ListView控件某列表头进行排序

    VB 单击ListView控件某列表头进行排序,实现方法比较简单,不用写什么函数,ListView控件本身就有排序功能了. Private Sub ListView1_ColumnClick(ByVa ...

  2. android中的 listview控件,聊聊Android中的ListView控件

    软硬件环境 Macbook Pro MGX 72 Android Studio 1.3.2 坚果手机 前言 ListView是Android系统中使用非常广泛的一种控件,几乎所有的App都会用到它.它 ...

  3. android 全选功能,Android实现ListView控件的多选和全选功能实例

    本文实例讲述了Android实现ListView控件的多选和全选功能.分享给大家供大家参考,具体如下: 主程序代码 MainActivity.Java package yy.test; import ...

  4. listview控件Android,Android中ListView控件的简单使用

    文章引自郭霖<第一行代码> ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕 使用LIstView控件 1 在布局文件中引入Li ...

  5. Android列表ListView控件的使用

    在Android开发中,ListView是比较常用的控件,它以列表的形式显示具体内容,并且能够根据数据的长度自适应显示. 在ListView中可以根据需要显示自定义的列表内容,包括文字(TextVie ...

  6. Android获取景点的信息,景点介绍(ListView控件应用)

    1. 案例概述 此案例主要是对ListView列表控件的使用.当应用中包含多项数据,每项数据结构相同,只是内容不同时,可通过列表显示.对于列表中的内容,可以是显示字符串的TextView,也可以是结构 ...

  7. android 自定义listview控件,一个简单又完整的自定义ListView

    ListView 一.简单列表 1.在activity_main中添加控件ListView xmlns:tools="http://schemas.android.com/tools&quo ...

  8. Android使用ListView控件问题

    Android使用ListView控件问题: The application has stopped unexpectedly, please try again. 开发环境:android 1.6 ...

  9. android中ListView控件onItemClick事件中获取listView传递的数据

    http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...

最新文章

  1. RabbitMQ学习总结(7)——Spring整合RabbitMQ实例
  2. Linux命令(持续更新)
  3. CentOS 7安装教程(图文详解)如下
  4. 什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查
  5. python最小二乘法拟合_Python 普通最小二乘法(OLS)进行多项式拟合
  6. C++初始编程及相关的问题总结
  7. uiautomator2进阶
  8. Myeclipse 安装Aptana3.2 插件
  9. MinerConfig.java 爬取配置类
  10. 隐藏esp_汽车一键启车主必须知道的几个“隐藏”技巧
  11. Spring Boot基础学习笔记21:自定义用户认证
  12. mysql error trace_防止DedeCMS错误警告日志data/mysql_error_trace.inc暴露后台管
  13. mongodb最多数据库_2020 年3 月数据库排行:前 10 整体下行,出新技术了?
  14. 题解 P3367 【【模板】并查集】
  15. 文本编辑框鼠标丢失问题
  16. 机器视觉的发展现状和前景分析
  17. 使用exrex第三方模块,制作私人订制的高精度密码字典,保存至txt
  18. 全国大部分城市的经纬度位置
  19. 一些AUTOSAR会议论坛的介绍(附资料下载)
  20. SMC SY系列电磁换向阀

热门文章

  1. 计算机专业学历简况,刘觉民
  2. 电源上的sense什么意思_开关电源基本术语
  3. 【ESP32】【乐鑫发布 AI 语音麦克风阵列开发板 ESP32-Korvo】
  4. 21 、查询不同老师所教不同课程平均分从高到低显示(不重点)(自己做出)
  5. 打造简易NineoldAndroids动画库,深入理解Android动画原理
  6. 计算机研讨会通讯录,江苏学会网 中国力学学会学术大会’2005 第二轮通知
  7. 30个精美的简单网站
  8. 10岁娃获“信息学奥赛”省一等奖
  9. 【不定时推荐】这些年读过的书第一本--《一个人的朝圣》
  10. 【年度总结】2021 邂逅前端,入坑算法