2012-06-20 13 views
5

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

私はこれを私のカスタムROMで見ました(そして私はCyanogenmodでこれを見ました)。ここではスクリーンショットはを通じてアイデアを得るためにです:

Screenshot of the "widget Button Order" in QuickPanel Settings of Sabotage ROM

私はカスタムリストビューのアイテムを作成し、アイテムをドラッグしていることを示すためにアイコンを設定する方法を知っているが、私は彼らがドラッグできるようにする方法がわかりませんそれに応じて順序を変更します。設定を保存する場合は、簡単に実装できるthisが見つかりました。

PS:私はCyanogenmodは、オープンソースである知っているが、私は、この特定のもののソースを見つけることができませんでした:(私は得ることができる最も近いどこか他のスクリーンの近くにあるべきthis、だった...

このことについてどんなヒントを事前に感謝

UPDATE:。私は追加や変更で、受け入れ答えからファイルを使用して終了し、私はさらに参考のためにここにリストしています

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

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

  • ViewGroupにViewをキャストしたときにエラーが発生したため、問題なくキャストを削除しましたが、不要でした。 (onInterceptTouchEventメソッド内)。

  • mRemoveMode = 1;をTouchInterceptorのコンストラクタに変更するか、またはを入力してください。私はTRASHだと思うが、リソースも利用できるはずだ。

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

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

私はそれが他の誰かの役に立てば幸い:)

+0

これには標準機能はないので、onTouchをオーバーライドしてタッチイベントを検出する必要があります。オーバーライドはおそらくlongClickイベントによってアクティブ化されます。そうしないと、ユーザーがアイテムをドラッグするか、リストをスクロールするかどうかわかりません。 – Christine

+0

@Christine [OnDragListener](http://developer.android.com/reference/android/view/View.OnDragListener.html)を使用できませんか? – jadkik94

+0

@ jadkik94こんにちは。これらのファイルを使って同じことを実装しようとしています。しかし、それはかなり古い質問なので、私は良いかどうかというよりは、ドラッグ可能なリストを実装するためのより便利な方法が出てきたのかどうか疑問に思っていましたか?私は何も見つけることができませんでした。あなたが与えることができる任意のポインタを感謝します..ありがとう。 – Anjani

答えて

5

実行する組み込みのウ​​ィジェットはありませんこれはAOSPの音楽プレーヤーで使用されているカスタム実装を見て、プレイリストの曲を並べ替えることができます。リストビューを拡張したクラスだとMotionEventsと再注文その項目のすべてを扱うだけでなく、項目を削除するためのスワイプを検出するための責任がある

TouchInterceptor.java

。これは、TrackBrowserActivity.javaクラスのアクティビティに実装されています。

これには、DragListener、DropListener、およびRemoveListenerの3つのインターフェイスもあります。これらのインターフェイスを使用して、イベントの発生を呼び出すコールバックを提供することができます。リストオーダーの変更をSavedPreferencesに更新することができます(リストビューはそれを処理しないためです)。

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

+0

そうです、私はそれをどこか他のところで見たことが分かりましたが、なぜ私はこれを考えなかったのですか?それは、[docs](http://developer.android.com/guide/topics/ui/drag-drop.html)のようなドラッグアンドドロップイベントを使用しないのは奇妙です。とにかく、私はこれを一人でやったことがありませんでした。ありがとう、私はそれを試し、あなたに戻ってきます。 – jadkik94

+0

ドラッグアンドドロップAPIはAPIレベル11で追加されました。この実装はAPIレベル8をターゲットにしているため、APIが完成したり広く利用できるようになる前に書かれている可能性があります。 – Victor

+0

そうかもしれません。私はちょうど何かに気付きました、TouchInterceptorクラスがMusicPicker.javaで使用されていますか?そのクラスはそこでインポート/使用されません。 – jadkik94

関連する問題