Android编程之可以实现拖动排序的listview控件
白羽 2018-07-24 来源 :网络 阅读 239 评论 0

摘要:本文将带你了解Android编程之可以实现拖动排序的listview控件,希望本文对大家学Android有所帮助

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频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

X
免费获取海同IT培训资料
验证码手机号,获得海同独家IT培训资料
获取验证码
提交

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    ICP许可  沪B2-20190160