ListViewAnimationsに含まれているDynamicListView
はとても素晴らしいです
お手軽にGmailアプリのようなリストビューができるのです
ということで、それを使ってドラッグアンドドロップでリストの並び替えをしてみたのですが、
意外な(?)なとこでハマってしまったのでメモ。
問題ない正しい方から
使い方は公式wikiにも書かれている通りです
mDynamicListView = (DynamicListView)findViewById(R.id.dynamic_list_view);
// ドラッグあんどドロップを有効に
mDynamicListView.enableDragAndDrop();
// 長押しリスナーでドラッグ開始の処理
mDynamicListView.setOnItemLongClickListener();
// ドロップの処理
mDynamicListView.setOnItemMovedListener();
と、こういう感じで各リスナーで正しく処理をかけば問題なく、ドラッグアンドドロップで並び替えできるでしょう
それぞれの処理は端折ってますけど。
自分が血迷ってできなかった方
でも、自分の場合、最初…
mDynamicListView = (DynamicListView)findViewById(R.id.dynamic_list_view);
// 長押しリスナーでドラッグ開始の処理
mDynamicListView.setOnItemLongClickListener();
// ドロップの処理
mDynamicListView.setOnItemMovedListener();
// ドラッグあんどドロップを有効に
mDynamicListView.enableDragAndDrop();
こう書いていたのです。
違い、わかりますか?
enableDragAndDrop()
の呼ぶ順番です。(最後に呼んでいたのです
こうすると、どうなるのか…
ドラッグアンドドロップはできます
(画面上リストアイテムもきっちり移動します)
がしかし・・・
onItemMoved()
が呼ばれない
という事態に…。
なので、画面上の並び替えの結果を受け取ってサーバーへ送信したいとかっていう場合、
処理できません…(汗)
結論
ちゃんと順番を守って使いましょう。
こんなことで、めちゃ時間くった…orz