Android开源--DragSortListview
简介:DragSortListview是支持通过左右拖拉删除数据,上下拖拉排序的列表,缺点是当数据
太多时不好下拉.
API简介:
DragSortListView.DropListener>>该接口监听上下拖动时,位置变化的监听器;
DragSortListView.RemoveListener>>该接口监听左右拖动时,滑动成功删除数据的接口;
FloatViewManager:是上下拖动时,出现的悬浮框控制 包括声明和销毁的控制
DragSortListView:设置拖动的开关;并设置回调的监听器,因为系统不知道我们数据操作的
具体业务
DragSortController:该控制器实现了FloatViewManager,同时实现了OnTouchListener;
说明,大部分拖动所产生的操作都在Controller里面.删除操作的开关也是Controller;
同时,定义删除和拖拉的模式也在Controller里面.这里就存在一个问题,我们所操作的
对象是谁,系统提供了setDragHandleId()方法来设置操作的View;
/** * 一个简单的例子 * @author Lean @date:2014-10-23 */ public class MainActivity extends Activity { private DragSortListView mDslv; private DragSortController mController; ArrayAdapter<String> adapter; private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() { @Override public void drop(int from, int to) { if (from != to) { //上下拖动时,手指释放瞬间调用 String item = adapter.getItem(from); adapter.remove(item); adapter.insert(item, to); } } }; private DragSortListView.RemoveListener onRemove = new DragSortListView.RemoveListener() { @Override public void remove(int which) { //删除位置成功调用 adapter.remove(adapter.getItem(which)); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDslv = (DragSortListView) findViewById(android.R.id.list); //打开拖动开关,如果不打开 右滑操作没反应 mDslv.setDragEnabled(true); //设置监听器 mDslv.setDropListener(onDrop); mDslv.setRemoveListener(onRemove); mController = buildController(mDslv); //设置悬浮框管理器,点击监听器 mDslv.setFloatViewManager(mController); mDslv.setOnTouchListener(mController); setListAdapter(); } public DragSortController buildController(DragSortListView dslv) { DragSortController controller = new DragSortController(dslv); //设置拖动对象 id映射View controller.setDragHandleId(R.id.drag_rl); //设置移除开关 controller.setRemoveEnabled(true); //设置拖动/移除 模式 controller.setDragInitMode(DragSortController.ON_DRAG); controller.setRemoveMode(DragSortController.FLING_REMOVE); return controller; } public void setListAdapter() { String[] array = getResources().getStringArray(R.array.jazz_artist_names); ArrayList<String> list = new ArrayList<String>(Arrays.asList(array)); adapter = new ArrayAdapter<String>(this, R.layout.list_item_handle_left, R.id.text, list); mDslv.setAdapter(adapter); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。