2016/06/03

[android]ダイアログにListViewを載せよう - 後編

support.v4とかsupport.v7の数字はAPIバージョンかと思っていたのだが、履歴を見るとv7にAPI19以下向けが追加されていたので、言い切れないと思った。

Support Library Revision History | Android Developers

 

試しに全部外してみたのだが、Android 6.0以降で必要となる位置情報許可の確認で使うAPIが、v4かAPI23以降しか無さそうだった。
そう考えると、この数字は「APIレベルXX以降」ではあるのだが、XX未満というのがわからないのだな。
ActivityCompat.checkSelfPermission()も、API4以降だったら使う機会があるということなのか。

SDKのMINを設定して、それでもコンパイルが通るならsupportは使わなくてもよいと考えて良い気がする。


ダイアログの表示はできるようになったので、次はリストの表示だ。
リストを追加する

データが固定の場合は、こういうイメージでよいのかな。

image

データの見せ方はAdapterViewから派生したListViewなどが制御する。
AdapterViewが扱うデータはAdapterから派生したArrayAdapter<T>などが持つ。
まあ、持つといっても、実際はnewするときに引数で配列を渡すくらいだろう。

DialogFragmentの場合は、AdapterViewに相当する部分はDialogFragment側が準備してくれるので、データを準備してsetSingleChoiceItems()などで渡してやるとよい。

内容が可変でないならば、string-arrayで準備するのもよいだろう。


さて、内容が可変で、動的に更新したい場合はどうだろうか。

幸い、BDS Clientの生成ソースは通常のListViewを動的に更新するようになっているので、まねをするとよいと思われる。

BaseAdapterをextendsしたclassをまるまる持ってきた。
これのインスタンスをsetSingleChoiceItems()に設定すると、とりあえず動いた。
image
接続の実装は、次回だ。


あとは、画面外をタップしたらダイアログが閉じるのだけど、そのときにScanを停止させたい。

builderにsetOnCancelListener()というのがあったのでOnCancelListenerをnewしてみたのだが、ダイアログ表示時に落ちてしまった。
ドキュメントを読むと、onDismiss()をオーバーライドすると呼ばれるそうだ。
適当にやっちゃいかんな。

public void onDismiss(DialogInterface dialog);
うん、呼ばれた。

ここまでをコミットした。
サンプルそのままの箇所も多いが、数日前よりはましになったんじゃないかね。
hirokuma/AndroidTwoSpinners at 6136b8111d9978b800b4a68d1d90d3775cc1b42a

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。