拖放光标适配器和列表适配器的sorting

我很惊讶有一个游标适配器和列表适配器的拖放sorting这样less量的信息。

我发现在stackoverflow上最近的post是这样的:

https://stackoverflow.com/a/5047618/317889

但是,我不清楚如何实现CommonsWare的build议 – 澄清将是非常有帮助的。

到目前为止,我将光标数据绑定到列表适配器,并将其设置如下:

mMyCursorAdapter = new MyCursorAdapter(getActivity(), null); setListAdapter(mMyCursorAdapter); getLoaderManager().initLoader(0, null, this); 

该列表已生成,但我现在希望将拖放function添加到列表项。

我想从架构的angular度来了解这个最好的方法,并且关于如何去开发核心function的任何指示也是有用的。

Solutions Collecting From Web of "拖放光标适配器和列表适配器的sorting"

Jason McReynolds的博客文章 (包括一个示例项目 )帮了我很大的忙。

它解释了如何使用CursorAdapter和SqLite使用Carl A. Bauer的Library Drag-Sort-ListView 。 它显示了如何将ListView的新sorting状态保存在数据库中。

这绝对是可以实现的,幸运的是你大部分的工作已经被照顾好了,但是你需要稍微修改一下课程来满足你的要求。

默认的Android音乐应用程序有你需要的所有类。

首先,您需要获取允许拖放的自定义ListView

这可以在这里find – TouchInterceptor.java 。

您还需要获取用于实际移动ListView项目的自定义Cursor 。 这是一个名为NowPlayingCursor的内部类。

这可以在这里find – TrackBrowserActivity.java

NowPlayingCursor扩展AbstractCursor及其用于返回队列。 方法makeNowPlayingCursor()makeNowPlayingCursor()编写大部分自己的代码的地方。 不用返回队列,你需要返回感兴趣的项目,不pipe它们是什么。

为了使用TouchInterceptor ,你需要实现TouchInterceptor.DropListener

  private TouchInterceptor.DropListener mDropListener = new TouchInterceptor.DropListener() { public void drop(int from, int to) { final NowPlayingCursor mNowPlayingCursor = (NowPlayingCursor) YOUR_CURSOR; mNowPlayingCursor.moveItem(from, to); // Call `notifyDataSetChanged` here. } }; 

你也应该看看他们的moveQueueItem方法用来将一个项目从一个索引移动到另一个索引。 当onMovemoveItem被调用时,这个方法在NowPlayingCursor使用。

这可以在这里find – MediaPlaybackService.java

所以,你需要做一些工作,但是这绝对有可能。

这里是一个图书馆,希望能解决你的问题,它可以拖放列表项的顺序。 有一个很好的演示,包括FragmentsCursors用例

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

主要特征:

  • 干净的拖放(没有视觉故障,我希望!)。
  • 拖动时直观,平滑的滚动。
  • 支持异构物品高度。
  • 公共startDrag()和stopDrag()方法。
  • 用于自定义浮动视图的公共接口。