拖放排序光标适配器和列表适配器



我很惊讶有这么少量的信息,使用光标适配器和列表适配器进行拖放排序。

我在stackoverflow上找到的最接近的帖子是这个:

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

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

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

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

已生成,但我现在希望向列表项添加拖放功能。

我想知道从架构角度解决这个问题的最佳方法,任何关于如何开发核心功能的指示也将是有用的。

Jason McReynolds的这篇博文(包括一个示例项目(对我帮助很大。

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

这绝对可以实现,幸运的是,大部分工作已经处理好了,但是您需要稍微修改一个类以满足您的规格。

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

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

可以在这里找到 - TouchInterceptor.java。

您还需要获取他们的自定义Cursor,用于实际移动ListView中的项目。这是一个叫做NowPlayingCursor的内部类。

可以在这里找到 - 跟踪浏览器活动.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中使用此方法。

可以在这里找到 - 媒体播放服务.java

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

这是一个希望能解决您的问题的库,它支持列表项的拖放重新排序。有一个出色的演示,其中包括FragmentsCursors的用例

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

主要特点:

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

最新更新