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()
}
}
}