5

ユーザーがリストからアイテムの順序を変更できる ListPreference を探していました。アイテムはドラッグ可能で、ユーザーが並べ替えることができます。

これは、QuickPanel のカスタム ROM で見ました (Cyanogenmod で見たことはほぼ確実です)。アイデアを理解するためのスクリーンショットを次に示します。

のスクリーンショット

カスタム ListView 項目を作成し、項目がドラッグ可能であることを示すアイコンを設定する方法は知っていますが、それらをドラッグ可能にする方法とそれに応じて順序を変更する方法はわかりません。それらを設定に保存することに関しては、これを簡単に実装できることがわかりました

PS:Cyanogenmodがオープンソースであることは知っていますが、この特定のもののソースを見つけることができませんでした:(私が得ることができた最も近いものはこれでした。これは他の画面の近くにあるはずです...

これについてのヒントを事前にありがとう。

更新:私は、追加と変更を加えて、受け入れられた回答のファイルを使用することになりました。さらに参照するために、ここにそれらをリストします。

  • カスタム アダプター (私の場合は ArrayAdapter) を使用して、このアイテムがドラッグ可能であるという視覚的なフィードバックを実装します。これは、TextView の近くの ImageView です。これはオプションです。

  • それに応じてリストを更新するには、DragListener と RemoveListener を設定します。ListView はそれを自動的に行いません。また、使用しているアダプタによって異なります。

  • View を ViewGroup にキャストする行があり、エラーが発生したため、問題なくキャストを削除しました。必要ありませんでした。(onInterceptTouchEvent メソッド内)。

  • TouchInterceptormRemoveMode = 1;のコンストラクター、または次のいずれかを変更しますFLING = 0; SLIDE = 1; TRASH = 2;。の場合TRASH、リソースも利用できるはずです。

実際には、回答のリンクからではなく、既に持っていた Cyanogenmod からファイルを取得しましたが、これらのファイルは同じだったと思います。

これらはプロジェクト内の実際のファイルです (執筆時点では r12):

私はそれが他の誰かを助けることを願っています:)

4

1 に答える 1

5

これを行う組み込みのウ​​ィジェットはありませんが、プレイリスト内の曲の並べ替えを可能にするために AOSP 音楽プレーヤーで使用されるカスタム実装を確認することをお勧めします。

TouchInterceptor.java

これは、ListView を拡張するクラスであり、すべての MotionEvents の処理とそのアイテムの並べ替え、およびアイテムを削除するためのスワイプの検出を担当します。TrackBrowserActivity.javaクラスのアクティビティに実装されていることがわかります。

これには、DragListener、DropListener、RemoveListener という 3 つのインターフェイスも知っておく必要があります。これらのインターフェイスを使用して、これらのイベントに対して発生するコールバックを提供し、リストの順序に加えられた変更を SavedPreferences に更新できるようにすることができます (ListView はそれを処理しないため)。

TouchInterceptor クラスを簡単に拡張または変更して、機能を追加できます。低レベルのものはすべて用意されているからです。

于 2012-06-20T16:36:39.710 に答える