Fragment→Activityへの通知(コールバック)のベストプラクティスは?
DialogFragment使うとOnCancelListenerとかがめっちゃセットしにくい…。ベストプラクティス探すか
2012-08-28 10:02:13やりたかったのはActivityへのアクセスなので、とりあえずDialogFragment内のonCancel()にて、getActivity()をキャストして対処することにした
2012-08-28 10:17:43+1 RT @ryosms: @esperia09 DialogFragmentからActivityにコールバックするinterface作る
2012-08-28 10:28:16@LuckOfWise @ryosms まじすか…。考えたんですけど手数多くてやめたんですけどそうするべきなんですかね。。
2012-08-28 10:30:44@esperia09 よくある実装はActivityにコールバック用のHandlerを持たせて、そのHandlerをDialogFragmentに渡しておく。(DialogFragmentはよくわかってませんがw
2012-08-28 11:12:29@Toro_kun リスナーかハンドラかってことですねぇ。。なんか最近Android Lintに「HandlerをAcitivityに持たせる時はstaticにしなさい!リークするから!」て言われるのでリスナーの方が僕の中では有力ですw http://t.co/jK3G6uQc
2012-08-28 11:19:53@esperia09 なるほど、リークするのかぁ。知らなかった・・・。シングルトンならいいんでしょうけど・・・。
2012-08-28 11:29:10Fragmentって自動的にシステムによって再起動される可能性があることを考えると、ActivityからFragmentにプリミティブでない値を渡しておくのはバグの元な気がしてきた
2012-08-28 11:27:30@esperia09 なので setArguments() で Bundle 渡せ、、みたいな話がなかったっけ。コンストラクタに引数を付けるな的な
2012-08-28 11:28:26@tamacjp プリミティブでないっていうあたりがミソです。Bundleに渡せる値であればsetArguments/onSavedInstanceState使えばいいんですけど、それ以外のものです。。
2012-08-28 11:29:31@esperia09 言わんとしてることはわかってる。Parcelable でないオブジェクトってことだよね。そうすると結局親(というかオーナー)への通知は getActivity() からごにょごにょしないといけないのかね。(今はそうしてるけど
2012-08-28 11:31:42@tamacjp @esperia09 データの塊でParcelableにするのが面倒だとSerializableにして無理やりねじ込んだりしてますね
2012-08-28 11:33:20@cattaka_net @esperia09 データは例えばキーだけ渡して再構築とかもできると思うんだけど、処理結果の通知先とかみんなどうしてるんかなーとか…
2012-08-28 11:34:48@tamacjp @esperia09 Fragment→MyActivityへの通知ですか?MyActivityの参照を持っちゃうとややこしいことになりそうなので、getActivity()のdispatchEventで投げますかねぇ、、、
2012-08-28 11:38:47@tamacjp @esperia09 おおう、無いですね。今気が付きました。じゃぁ自分でInterface切ってそこに投げ込むようにしますかね、、もしくはrunOnUiThreadで豪快にゲホゲホ
2012-08-28 11:42:06@tamacjp Fragment内でActivityへのキャストを行うと、Fragmentの使い回しがしづらくなるのでそれもあんまり好きくなかったり…w (文句多い
2012-08-28 11:34:30@esperia09 getActivity()が目的の interface を持ってるかどうか判定して持ってる場合にだけそのinterfaceのメソッドを呼ぶので使い回しはできる、、つもり。特定のActivity(のサブクラス)にキャストするわけではなく。
2012-08-28 11:37:19