拖放游标适配器和列表适配器的排序

我很惊讶有关光标适配器和列表适配器的拖放排序有这么少的信息。

我在stackoverflow上find的最近的post就是这个:

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

但是,我不清楚如何实现CommonsWare建议的内容 – 澄清会非常有帮助。

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

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

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

我想知道从架构的角度来看这个问题的最佳方法,任何关于如何开发核心function的指针也会很有用。

Solutions Collecting From Web of "拖放游标适配器和列表适配器的排序"

这篇由Jason McReynolds撰写的博客文章 (包括一个示例项目 )帮助了我很多。

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

这绝对可以实现并且幸运,因为大部分工作已经得到了解决,但您需要稍微修改一个类以满足您的规范。

默认的Android音乐应用程序包含您需要的所有课程。

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

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

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

这可以在这里find – TrackBrowserActivity.java

NowPlayingCursor扩展了AbstractCursor ,用于返回队列。 方法makeNowPlayingCursor()是您编写大部分自己的代码的具体位置。 您无需返回队列,而是需要返回您感兴趣的项目,无论它们是什么。

要使用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()方法。
  • 用于自定义浮动视图的公共接口。