对于使用游标适配器和列表适配器进行拖放排序的信息很少,我感到非常惊讶。
我在stackoverflow上找到的最近的帖子就是这个:
https://stackoverflow.com/a/5047618/317889
但是,我不清楚如何实现CommonsWare建议的内容 - 澄清会非常有用。
到目前为止,我将游标数据绑定到列表适配器并将其设置如下:
mMyCursorAdapter = new MyCursorAdapter(getActivity(), null);
setListAdapter(mMyCursorAdapter);
getLoaderManager().initLoader(0, null, this);
生成列表但我现在希望将拖放功能添加到列表项中。
我想知道从架构的角度来看这个问题的最佳方法,任何关于如何开发核心功能的指针也会很有用。
答案 0 :(得分:4)
This blog post(包括sample project)给了我很多帮助。
它解释了如何将Carl A. Bauer的库Drag-Sort-ListView与CursorAdapter和SqLite一起使用。它显示了如何在数据库中保存ListView的新排序状态。
答案 1 :(得分:1)
这绝对可以实现并且幸运,因为大部分工作已经得到了解决,但您需要稍微修改一个类以满足您的规范。
默认的Android音乐应用程序包含您需要的所有课程。
首先,您需要获取允许拖放的自定义ListView
。
<强> That can be found here - TouchInterceptor.java 强>
您还需要获取用于实际移动Cursor
中项目的自定义ListView
。这是一个名为NowPlayingCursor
的内部类。
<强> That can be found here - 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
方法。调用NowPlayingCursor
和onMove
时moveItem
使用此方法。
<强> That can be found here - MediaPlaybackService.java 强>
所以,你需要完成一些工作,但这绝对有可能。
答案 2 :(得分:0)
这是一个希望能够解决您的问题的库,它可以拖放列表项的重新排序。
有一个很好的演示,其中包含Fragments
和Cursors
https://github.com/bauerca/drag-sort-listview
主要特点:
- 清洁拖放(没有视觉故障;我希望!)。
- 拖动时直观,流畅的滚动。
- 支持异构项目高度。
- 公共startDrag()和stopDrag()方法。
- 用于自定义浮动视图的公共界面。