12408


[android:configChanges="orientation|screenSize"指定時の挙動](https://ja.stackoverflow.com/questions/12367/androidconfigchanges-
orientationscreensize%E6%8C%87%E5%AE%9A%E6%99%82%E3%81%AE%E6%8C%99%E5%8B%95)  
そこに書いた私の考えに間違いがあり、回転時の再生成を抑制したところで別の要因で再生成されることがあることを知りました。  
そこで新たな問題が出てきたのですが、そこに書くと話がタイトルと違うような気がしたので改めて質問します。

そこの回答のコメントに書いたように、「アクティビティを保持しない」を試してみたところh.satoさんの言う通り再生成されたようで変数がリセットされました。  
DialogInterface.OnClickListenerをアラート用Fragment以外から渡したいのですが、その型はBundleには入りません。  
回答の追記に書かれた方法を試そうと思ったのですが、別の問題も出てきました。

コメントを書いた時は忘れていたのですが、`戻るボタンでアプリを終了する時に確認用でActivityから作成＆表示させるパターン`があります。  
addやreplaceの時にタグを追加すればActivityからFragmentを取得可能ですが、`同じFragmentだけどダイアログの挙動が違うパターン`があるため、この方法はそのままでは使えません。  
もしその`同じFragmentだけどダイアログの挙動が違うパターン`用にフラグを用意するのであれば、アラート用のFragmentに全パターンの挙動を書いてフラグで挙動を変えるのとそんな変わらない気もします。

ダイアログを選択した後何かさせたい時 (どこからダイアログを作成&表示するか)  
・特定の画面を表示している時に戻るボタンを押した時 (現状Activityから)  
この時アプリの終了になるので、その確認用のダイアログを表示します。  
・FragmentB_3で保存処理をする前 (現状FragmentBから)  
この時その確認用のダイアログを表示します。

特定の画面とはFragmentAとFragmentB_1です。  
FragmentAはアプリを起動した時に表示される画面で、FragmentB_1はFragmentAからreplaceされる画面です。  
FragmentB_3はFragmentB_1からreplaceされるFragmentB_2からreplaceされる画面です。

問題に気がつくまでBundleを経由せずに使用していたのですが、この場合はどのようにするのがよいのでしょうか？


CC BY-SA 3.0
2015-07-16T06:02:59.470
12407
2015-07-16T06:08:32.303
2017-04-13T12:52:39.113
-1
9710
question
android android-fragments android-activity
DialogInterface.OnClickListenerの挙動をDialogFragment以外から制御したい


`DialogInterface.OnClickListener`オブジェクトを`DialogFragment`を渡すのではなく、呼び出し元の`Fragment`を渡すようにします。

`DialogFragment`での選択結果などを呼び出し元に伝えたい場合は、次のように`setTargetFragment()`で呼び出し元をセットするようにしてください。

うちのサイトにやり方書いてあるのでどうぞ（ここに書くにはやや長いので）  
<https://tech.mokelab.com/android/Fragment/result.html>

呼び出し元が`Activity`の場合は`setTargetFragment()`が使えないので、引数にrequestCode相当のものと、Activityからの呼び出しであることをセットした上、`getActivity()`でActivityを取得する方法になると思います。


CC BY-SA 3.0
2015-07-16T06:08:32.303
12408
2015-07-16T06:08:32.303
845
12407
answer