Fragmentのお話

・Activityにコールバックしたいときどうするの? から ・引数付きコンストラクタを使うなとあれほど(ry まで
22

Fragment→Activityへの通知(コールバック)のベストプラクティスは?

ネスケ@むおおおお @esperia09

DialogFragment使うとOnCancelListenerとかがめっちゃセットしにくい…。ベストプラクティス探すか

2012-08-28 10:02:13
ネスケ@むおおおお @esperia09

やりたかったのはActivityへのアクセスなので、とりあえずDialogFragment内のonCancel()にて、getActivity()をキャストして対処することにした

2012-08-28 10:17:43
ネスケ@むおおおお @esperia09

@ryosms すますん先生ならどうしますか!?

2012-08-28 10:20:10
(っ’ヮ’c) < ★しっぽ @ryosms

@esperia09 DialogFragmentからActivityにコールバックするinterface作る

2012-08-28 10:21:15
英吉 @LuckOfWise

+1 RT @ryosms: @esperia09 DialogFragmentからActivityにコールバックするinterface作る

2012-08-28 10:28:16
ネスケ@むおおおお @esperia09

@LuckOfWise @ryosms まじすか…。考えたんですけど手数多くてやめたんですけどそうするべきなんですかね。。

2012-08-28 10:30:44
トロくん(ほぼ自宅警備員) @Toro_kun

@esperia09 よくある実装はActivityにコールバック用のHandlerを持たせて、そのHandlerをDialogFragmentに渡しておく。(DialogFragmentはよくわかってませんがw

2012-08-28 11:12:29
ネスケ@むおおおお @esperia09

@Toro_kun リスナーかハンドラかってことですねぇ。。なんか最近Android Lintに「HandlerをAcitivityに持たせる時はstaticにしなさい!リークするから!」て言われるのでリスナーの方が僕の中では有力ですw http://t.co/jK3G6uQc

2012-08-28 11:19:53
トロくん(ほぼ自宅警備員) @Toro_kun

@esperia09 なるほど、リークするのかぁ。知らなかった・・・。シングルトンならいいんでしょうけど・・・。

2012-08-28 11:29:10
ネスケ@むおおおお @esperia09

Fragmentって自動的にシステムによって再起動される可能性があることを考えると、ActivityからFragmentにプリミティブでない値を渡しておくのはバグの元な気がしてきた

2012-08-28 11:27:30
tama #ハタチ @tamacjp

@esperia09 なので setArguments() で Bundle 渡せ、、みたいな話がなかったっけ。コンストラクタに引数を付けるな的な

2012-08-28 11:28:26
ネスケ@むおおおお @esperia09

@tamacjp プリミティブでないっていうあたりがミソです。Bundleに渡せる値であればsetArguments/onSavedInstanceState使えばいいんですけど、それ以外のものです。。

2012-08-28 11:29:31
tama #ハタチ @tamacjp

@esperia09 言わんとしてることはわかってる。Parcelable でないオブジェクトってことだよね。そうすると結局親(というかオーナー)への通知は getActivity() からごにょごにょしないといけないのかね。(今はそうしてるけど

2012-08-28 11:31:42
Takao Sumitomo @cattaka_net

@tamacjp @esperia09 データの塊でParcelableにするのが面倒だとSerializableにして無理やりねじ込んだりしてますね

2012-08-28 11:33:20
tama #ハタチ @tamacjp

@cattaka_net @esperia09 データは例えばキーだけ渡して再構築とかもできると思うんだけど、処理結果の通知先とかみんなどうしてるんかなーとか…

2012-08-28 11:34:48
Takao Sumitomo @cattaka_net

@tamacjp @esperia09 Fragment→MyActivityへの通知ですか?MyActivityの参照を持っちゃうとややこしいことになりそうなので、getActivity()のdispatchEventで投げますかねぇ、、、

2012-08-28 11:38:47
tama #ハタチ @tamacjp

@cattaka_net @esperia09 汎用的な dispatchEvent ってなくないですか?

2012-08-28 11:40:17
Takao Sumitomo @cattaka_net

@tamacjp @esperia09 おおう、無いですね。今気が付きました。じゃぁ自分でInterface切ってそこに投げ込むようにしますかね、、もしくはrunOnUiThreadで豪快にゲホゲホ

2012-08-28 11:42:06
ネスケ@むおおおお @esperia09

うおお、runOnUiThreadつかったことない…!

2012-08-28 11:44:13
Takao Sumitomo @cattaka_net

翌々考えたらrunOnUiThreadは型安全については解決しない気がする

2012-08-28 11:45:30
ネスケ@むおおおお @esperia09

@tamacjp Fragment内でActivityへのキャストを行うと、Fragmentの使い回しがしづらくなるのでそれもあんまり好きくなかったり…w (文句多い

2012-08-28 11:34:30
tama #ハタチ @tamacjp

@esperia09 getActivity()が目的の interface を持ってるかどうか判定して持ってる場合にだけそのinterfaceのメソッドを呼ぶので使い回しはできる、、つもり。特定のActivity(のサブクラス)にキャストするわけではなく。

2012-08-28 11:37:19
1 ・・ 4 次へ