くっ、BLE接続の前にもう1段階あった。。。
まあ、ダイアログ側でBLE接続をしてもよいのだけど、とにかくダイアログで行った結果を呼び出し元のActivityに返したい。
検索すると、いろいろ出てきはするのだけど、だいたい「やりたいことに対して実装が多いので簡略化する方法を考えた」というパターンが多い。
onActivityResult()なんかで返せるのかと思っていたのだが、そういう時代ではないみたいだ。
現状のソースはこちら。
Activity側では、ダイアログをこの順番で表示させている。
- DialogFragmentをextendsしたクラスをnewする
- そいつをshow(getFragmentManager(), "xxx")する
DialogFragmentの説明を見ると、呼び出し元のActivityでイベントハンドラを作っておいて、DialogFragmentの方はgetActivity()したものをキャストしてイベントハンドラを呼び出している。
キャストするとちょっとガチガチすぎるので、interfaceとか作っておけばよいのかな。
あれ、でもgetActivity()で取ってこれるのは単なるActivityだ。
それがinterfaceをimplementsしているとかわかってくれないんじゃないか?
・・・エラーにならない。
こんなのでいいんだ。
なんか、Javaってこういうダウンキャストに対しては厳しいというイメージだったのだけど、不意に見せる優しさなのかね。
こういうギャップにぐっと来るのかもしれない。
BluetoothAdapterを渡すためにメソッドを追加したのだけど、どうもsetArguments()で渡す方がよいらしい。
Y.A.M の 雑記帳: Android Fragment で setArguments() してるサンプルが多いのはなぜ?
ほほう。
サンプルを見ると、DialogFragmentをextendsした方にnewInstance()を作って、その引数に入れてもらっているようだ。
そしてsetArguments()するところは呼ぶ人からは隠している。
よし、まねしよう。
と思ったのだが、私が渡したいのはBluetoothAdapterだ。
オブジェクトのようなものは、Serializableなどになっていないといけないみたいだ。
使いたいのはBluetoothLeScannerだから、それが得られるようなものであればなんでもよいのだけど。。。
しかし、getActivity()の存在を知ったので、そこからgetSystemService()してgetAdapter()すればよいことがわかるのだった。
つまり、今の時点では引数はいらないということだ。
今日までのソースは、こちら。
次回こそ、次回こそはBLE接続のはず。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。