AlertDialogを今までActivityで作ってましたが、そうするとメモリーリークが発生するので、 DialogFragmentを継承させて、呼び出すようにしました。 その時の手順です。
①AlertDialogのクラスの作成
DialogFragmentを継承させたクラスを作成し、そこで、ライフサイクルの管理をします。
class AlertDialog : DialogFragment() { var title = "title" var okText = "OK" var onOkClickListener : DialogInterface.OnClickListener? = null override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val builder = AlertDialog.Builder(context!!) builder.setTitle(title) .setPositiveButton(okText, onOkClickListener) return builder.create() } override fun onPause() { super.onPause() // ダイアログを閉じる dismiss() } }
とりあえずはメッセージとOKボタンのみを簡易的に表示させるようにしています。 AlertDialogを生成し、戻り値にしています。
②実際使うActivityに適用
①で作ったAlertDialogをActivityで表示させるようにします。
class MainActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 省略 var dialog = AlertDialog() dialog.title = "更新しました" dialog.onOkClickListener = DialogInterface.OnClickListener { dialog, which -> finish() } dialog.show(supportFragmentManager, null) } } }
①で作ったAlerDialogをインスタン化して、タイトルとOKボタンを押したときの処理をここで実装します。 ①で作ったクラスをAlertDialogにするとインポートする際に複数のクラスが出てくるかと思いますが、自分で作ったクラスをインポートしてください
この方法だとカスタマイズしたAlertDialogを表示させることもでき、DialogFragmentのライフサイクルで管理するので、メモリリークは起こりにくいと思います。