【发布时间】:2012-06-20 16:19:26
【问题描述】:
我正在寻找一个 ListPreference,用户可以在其中更改列表中项目的顺序。这些项目将是可拖动的,并且可以由用户重新排序。
我在 QuickPanel 的自定义 ROM 中看到了这个(我几乎可以肯定我在 Cyanogenmod 中看到过)。这是一个屏幕截图,可以帮助您理解这个想法:
我知道如何制作自定义 ListView 项目并设置图标以指示项目可拖动,但我不知道如何使它们可拖动,并相应地更改顺序。至于将它们保存在首选项中,我发现this 可以轻松实现。
PS:我知道 Cyanogenmod 是开源的,但我找不到这个特定东西的源代码 :( 我能得到的最接近的是 this,它应该在附近的某个地方其他屏幕...
在此先感谢您提供有关此问题的任何提示。
更新:我最终使用了已接受答案中的文件,并进行了添加和修改。我在这里列出它们以供进一步参考。
使用一个自定义的Adapter(我这里是ArrayAdapter),来实现这个item可拖动的视觉反馈,就是TextView附近的一个ImageView。这是可选的。
设置 DragListener 和 RemoveListener 以相应地更新列表。 ListView 不会自动执行此操作。这取决于您使用的适配器。
有一行将 View 投射到 ViewGroup,它出现了一些错误,所以我删除了投射,没有任何问题,不需要它。 (在 onInterceptTouchEvent 方法中)。
在 TouchInterceptor 的构造函数中更改
mRemoveMode = 1;,或以下之一:FLING = 0; SLIDE = 1; TRASH = 2;。我认为对于TRASH,也应该有可用的资源。
我实际上不是从答案的链接中获取文件,而是从我已经拥有的 Cyanogenmod 获取文件,但我猜这些文件是相同的。
这些是项目中的实际文件(在 r12,在撰写本文时):
- The Preference using this ListView
- The ListActivity with the listeners and the Adapter
- The actual ListView
我希望它可以帮助其他人:)
【问题讨论】:
-
这个没有标准函数,所以你必须重写 onTouch 并检测触摸事件。您的覆盖可能会被 longClick 事件激活,否则您不知道用户是要拖动项目还是滚动列表。
-
@Christine 我不能用OnDragListener吗?
-
@jadkik94 嗨。我正在尝试使用这些文件来实现同样的事情。但由于这是一个相当古老的问题,我想知道是否有更好的或者我会说更方便的方法来实现可拖动列表是否已经出现?我找不到任何东西。将不胜感激您可以提供的任何指示.. 谢谢。