2021 Oct. 31.
MainActivity.kt
class MainActivity : AppCompatActivity() { // Bundleを利用してデータを渡す val str1 = "ab" val int1 = 12 val args = Bundle() args.putString("String1", str1) args.putInt("Integer1", int1) // DialogFragmentのインスタンスはshow()を実行する処理部のローカル変数とする。 // グローバル変数にするとメモリリークの原因となる。 val myDialogFragment = MyDialogFragment() myDialogFragment.setArguments(args) // ダイアログを開く myDialogFragment.show(supportFragmentManager, "simple") }
MyDialogFragment.kt
class MyDialogFragment: DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val builder = AlertDialog.Builder(activity) val inflater = requireActivity().layoutInflater val myDialogView = inflater.inflate(R.layout.my_dialog, null) // Dialog上のEditTextオブジェクトを取得する val editTextStr1 = myDialogView.findViewById<EditText>(R.id.editTextStr1) val editTextInt1 = myDialogView.findViewById<EditText>(R.id.editTextInt1) // 呼び出し元でBundleにセットした値を取得し、Viewにセットする editTextStr1.setText(requireArguments().getString("String1", "")) editTextInt1.setText(requireArguments().getInt("Integer1", 0).toString()) builder.setView(myDialogView) .setTitle("My Dialog") .setPositiveButton("OK") { dialog, id -> // codes to do } .setNegativeButton("Cancel") { dialog, id -> // nothing is done } return builder.create().also { dialog -> // dialogを返すと共に、dialogのOnShowでボタンオブジェクト取得し、必要な処理をセットする dialog.setOnShowListener({ val button = dialog.getButton(Dialog.BUTTON_POSITIVE) // codes to do }) } } }