##ダイアログが消えたタイミングで呼び出し元のコントロールを変化させたい
Kotlin勉強中の初学者です。Fragmentから表示させたダイアログが消えたタイミングで呼び出し元のListViewを更新するプログラムを作りたいです。自分なりに調べたりこちらでご助力いただいてコールバックといのをすれば良いのかな?というとこまで思い至りました。
ダイアログのDismissのタイミングで呼び出し元に戻ってくるところまではできたんですが、activityが破棄されているみたいでNullPointerExceptionが出たり、TextViewなどのプロパティを触ろうとするとmust not be null とエラーがでてしまいます。activityを再生成?する方法ってありますでしょうか。(それとも何らかの方法で保持しておくものなんでしょうか。)
以下ソースの一部になりますが、どういった処理を加えたらよいか。どういったことを調べたらよいかを教えていただけると嬉しいです。
呼び出し元のソースです。
Kotlin
1import kotlinx.android.synthetic.main.fragment_ranking.* 2 3class RankingFragment : Fragment() ,DialogDeleteCheck.DialogListener { 4 5//省略 6 7 //DialogのDismissのタイミングで戻ってくる。 8 override fun onDialogDismiss(dialog: DialogFragment) { 9 Log.d("tag","main") 10 tvRanking.text = "main" //must not be nullエラーが出る 11 } 12}
DialogFragmentのソースです。
Kotlin
1class DialogDeleteCheck: DialogFragment() { 2 3 //インターフェース 4 interface DialogListener{ 5 fun onDialogDismiss(dialog:DialogFragment) 6 } 7 8 /** 9 * コールバック用リスナー 10 */ 11 private var listener :DialogListener? = null 12 13 14 //省略 15 16 17 /** 18 * Dialog終了時の処理 19 */ 20 override fun onDismiss(dialog: DialogInterface) { 21 super.onDismiss(dialog) 22 Log.d("tag","dismiss") 23 listener?.onDialogDismiss(this) 24 } 25 26 /** 27 *Attach時処理 28 */ 29 override fun onAttach(context: Context) { 30 super.onAttach(context) 31 Log.d("tag","attach") 32 33 try { 34 val targetFrg : Fragment = RankingFragment() 35 listener = targetFrg as DialogListener 36 }catch (e: Exception){ 37 Log.e("ERROR","CANNOT FIND LISTENER") 38 } 39 } 40 41 /** 42 * Detach時処理 43 */ 44 override fun onDetach() { 45 super.onDetach() 46 Log.d("tag","detach") 47 listener = null 48 } 49}
##質問したいこと
・そもそもソースが間違っているせいで呼び出し元のactivityがnullになってしまうのでしょうか?
・呼び出し元のactivityを再生成?する方法はあるのしょうか?もしありましたらどういった処理をしたらよいか、どういうことを調べたらよいかを教えていただけると嬉しいです。
何かわかる方がいらっしゃいましたらよろしくお願いします!
##環境
Android Studio 4.1.1
AndroidEmulator Nexus_5X_API_28
回答1件
あなたの回答
tips
プレビュー