/var/log/messages

Dec 6, 2014 - 3 minute read - Comments - android

MultiChoiceMode 関連備忘メモ

凄くカン違いしてて成程って思ったので以下に控えを。

とりあえず github から clone して AndroidStudio に import を。特に難しいことをしている訳ではないはずなのでこのあたりはスルー。

と、言いつつ import でかなりヤラれていたりしました

そもそも何を控えておきたいか、というと MultiChoiceModeListener に関する諸々のメモです。

とりあえず

  • リストアイテム長押しで MultiChoiceMode に
  • アクションバー左のアイコンクリックで処理終了
  • 処理終了のタイミングで削除実施
  • 選択されているアイテムは背景を変える

というあたりを盛り込みます。

基本的な動作として

上にも書いたのですが MultiChoiceMode でまとめて削除を行なう、という処理にする場合の基本的な UI としては

  • 長押しで削除対象を選択する MultiChoiceMode になる
  • 選択が全て解除されたら Mode から離脱
  • 選択されている状態で ActionBar 左のアイコンをクリックすると削除実行

という形。以前実装したサンプルではこうした形になってはいませんでした。ちなみに左のアイコンをクリックした時に呼び出される callback は MultiChoiceModeListener の onDestroyActionMode というメソドになります。ここに更新処理を書く訳ですね。

ActionBar に余計な action button を付けないのであれば基本的に処理を書くのはここだけ、という形になります。あ、onCreateActionMode でタイトル設定はやらないと駄目ですね。すみません。

で、今回 CheckedTextView などというソレがある、という話を聞きましてそいえば以前作成したナニには選択した目印がなかったよな、と思い色々試してみた次第です。ただ、CheckedTextView って MultiChoiceMode でない時にも表示されてたりして微妙だなぁ、と思っていたら、Checkable を implements してれば反応してくれるらしい、という事を今更知ってリストビューの行レイアウトの背景で、を試してみた次第です。

これを盛り込んだものを以下なリポジトリに置いています。Chckeable を実装してれば ViewGroup でも何かをしてくれる、というのは非常に嬉しい。

-RoRAPIClient.AndroidStudio

onDestroyActionMode

データはサーバにあるので UI thread とは別な thread で削除なリクエストをサーバに投げてるのですが、ここで getListView().getCheckedItemPositions() の戻りなオブジェクトが初期化されている事が判明。

どうも onDestroyActioMode() が終了した時点でチェック状態もクリアされるのですね。

import 時の不具合

以下に控えを。import 後の build にて

Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version L declared in library com.android.support:suppoert-v4:21.0.0-rc1

という不具合が報告された上、ソースがエラーで一杯状態。どうも support-v4 あたりに起因する不具合らしい。

build.gradle に以下に修正をして OK なのかどうか。

 dependencies {
-    compile 'com.android.support:support-v4:+'
+    compile 'com.android.support:support-v4:20.+'
 }

その後、SDK が正しく設定されていないとやらで SDK Manager から API 19 なナニを導入していたりしています。むむむ。

ちなみに手製のライブラリプロジェクトを使っていたんですが import 時に .jar にして libs 配下に投入している模様。大丈夫なのかな。

プロジェクトを開き直してみたのですが cannot resolv symbol なエラーが出たまんまだな。ちなみに端末から ./gradlew aR してみるに build successful とのこと。

以下によれば

File -> Invalidate Caches / Restart との事ですが、AndroidStudio はどこかに行かれてしまわれていますなう。あ、再起動しちゃうのですね。しかし何なのこれ。

とりあえず無事に import できたみたいなので盛り込みに取りかかります。

と、思ったら

まだエラーが出てます。確認してみるに External Libraries に Android な SDK が居ない。そりゃ駄目だろと。

そして何契機か分かりませんが External Libraries に API 15 なナニが表示されているのを gradle.properties 比べてみようとして別プロジェクト開いた時に確認orz