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

HGP*_*GPB 21 android listview drag-and-drop android-cursoradapter

我很惊讶有一个关于使用游标适配器和列表适配器进行拖放排序的少量信息.

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

/sf/answers/353333291/

但是,我不清楚如何实现CommonsWare建议的内容 - 澄清会非常有用.

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

mMyCursorAdapter = new MyCursorAdapter(getActivity(), null);
setListAdapter(mMyCursorAdapter);
getLoaderManager().initLoader(0, null, this);
Run Code Online (Sandbox Code Playgroud)

生成列表但我现在希望将拖放功能添加到列表项.

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

adn*_*eal 1

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

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

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

可以在这里找到 - TouchInterceptor.java

您还需要获取他们的自定义Cursor,该自定义用于实际移动ListView. 这是一个名为 的内部类NowPlayingCursor

可以在这里找到 - 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.
        }
    };
Run Code Online (Sandbox Code Playgroud)

您还应该查看他们moveQueueItem用于将项目从一个索引移动到另一个索引的方法。该方法在和被调用NowPlayingCursor时使用。onMovemoveItem

可以在这里找到 - MediaPlaybackService.java

因此,您需要完成一些工作,但这绝对是可能的。