7. ダイアログを表示する

res/values/strings.xml

<resources>
    <string name="app_name">myapp</string>
    <string name="dialog_title">ご注文内容の確認</string>
    <string name="dialog_msg">選択されたメニューを注文します。よろしいですか。</string>
    <string name="dialog_btn_ok">注文</string>
    <string name="dialog_btn_ng">キャンセル</string>
    <string name="dialog_ok_toast">ご注文ありがとうございます。</string>
    <string name="dialog_ng_toast">ご注文をキャンセルしました。</string>
</resources>

res/layout/activity_main/xml

<?xml version="1.0" encoding="utf-8"?>
<ListView
    xmlns:android="http://schemas.android.com/apk/android"
    android:id="@+id/lvMenu" />

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ~ 省略 ~
        val lvMenu = findViewById<ListView>(R.id.lvMenu)
        val menuList = mutableListOf("menuA","menuB","menuC")
        val adapter = ArrayAdapter(this@MainActivity, android.R.layout.simple_list_item_1, menuList)
        lvMenu.adapter = adapter

        lvMenu.onItemClickListener = ListItemClickListener()
    }

    private inner class ListItemClickListener : AdapterView.OnItemClickListener {
        override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) {
            // オブジェクトを生成する
            val dialogFragment = OrderConfirmDialogFragment()
            // ダイアログを表示する
            dialogFragment.show(supportFragmentManager, "OrderConfirmDialogFragment")
        }
    }
    
}

可変のリストデータを作成する流れは

①リストデータを用意する

②アダプタオブジェクトを生成する(ArrayAdapter、SimpleAdapter、SimpleCursorAdapterの3種類あります。ArrayAdapter(context、ListViewの各行のレイアウトをあらわすR値、リストデータ)として使います。このとき単なるRでなくamdroid.Rとします。)

③ListViewにアダプタオブジェクトをセットする

kotlin+java/com.example.myapp/OrderConfirmDialogFragment.kt

class OrderConfirmDialogFragment : DialogFragment() {
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        // アクティビティがnullでないならばdialogオブジェクトを生成する
        val dialog = activity?.let {
            val builder = AlertDialog.Builder(it)
            builder.setTitle(R.string.dialog_title) // ダイアログのタイトルを設定
            builder.setMessage(R.string.dialog_msg) // ダイアログのメッセージを設定
            builder.setPositiveButton(R.string.dialog_btn_ok, DialogButtonClickListener())
            builder.setNegativeButton(R.string.dialog_btn_ng, DialogButtonClickListener())
            buider.create() // ダイアログオブジェクトの生成
        }
        // 生成したダイアログオブジェクトをリターンする
        return dialog ?: throw IllegalStateException("アクティビティがnullです")
    }

    private inner class DialogButtonClickListener : DialogInterface.OnClickListener {
        override fun onClick(dialog: DialogInterface, which: Int) {
            var msg = ""
            when(which) {
                DialogInterface.BUTTON_POSITIVE ->
                    msg = getString(R.string.dialog_ok_toast)
                DialogInterface.BUTTON_NEGATIVE ->
                    msg = getString(R.string.dialog_ng_toast)
            }
            Toast.makeText(activity, msg, Toast.LENGTH_LONG).show()
        }
    }
}