JDBな人生  専門的なことから日常的なことまで~ まぁ自由きままに書いていきます。
2017年05月 / 04月<< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>06月

アクセスランキング

[ジャンルランキング]
コンピュータ
413位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
58位
アクセスランキングを見る>>

GridViewなどのAbsListViewの項目をドラッグ&ドロップで入れ替える

初のJava&Androidのプログラミング関係の記事です。

先日、訳あってGridViewの項目をドラッグ&ドロップで移動し、その結果をDBに反映するというコードを書きました。既存のコードをできるだけ残すという形をとったので、いくつかのサイトを参考にしながら実装したのですが、今回書いたコードも案外使えるのではないかと思い参考までにと載せておくことにしました。(その他のサイトのものと比べてコメントも多めだと思います。)

JAR
http://gcc.minibird.jp/jabnz.g-c-c.info/130713/DDAbsListView.jar

javadoc
http://gcc.minibird.jp/jabnz.g-c-c.info/130713/ddabslistview/

ソース
http://gcc.minibird.jp/jabnz.g-c-c.info/130713/DDHandler.java
http://gcc.minibird.jp/jabnz.g-c-c.info/130713/SortableAdapter.java

タイトルにはAbsListViewと書きましたが、実際に使用するのはそのサブクラスであるGridViewやListViewになると思います。

使用方法:
  • Adapterを継承したクラスにSortableAdapterを実装
  • new DDHandler()にActivity、AbsListView、↑のAdapterのインスタンスを渡す
です。

SortableAdapterでは、ドラッグ&ドロップ後の処理(並び替えだったり項目の削除だったりDBの更新だったり表示の更新だったり)と、getViewで必要な情報を設定(ドラッグ中にはViewの再利用はしない方が良いためドラッグ中かどうかを取得できるように)を実装する必要があります。

SortableAdapterの例
http://gcc.minibird.jp/jabnz.g-c-c.info/130713/SortableBaseAdapter.java

※なお、項目の子要素の組み合わせよっては、イベントを捕まえるために以下ページの設定が必要となります。
AndroidのListViewの子要素(ListItem)にButtonを設置したとき、子要素(ListItem)のonClickListenerが呼ばれなくなってしまうのをどうするか。 - なんか作りたい人とか、ほねぶろぐ
http://aftercider.hatenablog.com/entry/2012/12/27/150116


また、項目の並び替えの処理に使えるよう、arrayListExchangerというArrayListの項目を交換する処理を書いておきました。

例えば以下のようなGridViewがあったとき、
Screenshot_2013-07-13-16-27-14.png

EXCHANGE_SIMPLEを指定して11を1の場所へ移動すると、
Screenshot_2013-07-13-16-27-42.png1と11の場所が入れ替わるのみです。

EXCHANGE_CLOSEを指定して11を1の場所へ移動すると、
Screenshot_2013-07-13-16-27-20.png11を1の場所に移動したのちに、残りの項目を詰めていきます。


まだまだ手を加える部分はたくさんあると思いますが、同じような機能を実装しようとしている方への、参考にでもなればと思い公開してみました。

#Javaはまだ全然書きなれていないので「これはJavaらしくない」というところなどあればぜひ指摘をお願いします。

参考にしたサイト
visible true: 【Android2.2以上】 GridView,ListViewでドラッグ&ドロップ、自動スクロールもする。動画もあるよ。
http://visible-true.blogspot.jp/2011/01/android22-gridviewlistview.html

Drag-Drop for an Android GridView | More Is Not Always Better
http://blahti.wordpress.com/2011/10/03/drag-drop-for-android-gridview/
   Java/Android SDK    TB(0)    CM(0)    EDIT    ページ↑

プロフィール

JDB Luigi

Author:JDB Luigi
どこにでもいるようなありふれた人間・・・という訳でもなく、かと言って怪しい宗教を信仰する変人という訳でも無い。

基本的に掲載しているコード等は煮ていただいても焼いていただいても結構ですが、利用は自己責任にてお願いいします。
また、バグ・アドバイス等もしあればよろしくお願いします。