画面遷移(MutableListのデータを渡す)

Kotlin

res/values/strings.xml

<resources>
    <string name="app_name">myapp</string>
</resources>

res/layout/activity_main.xml(第1画面)

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

res/layout/activity_second.xml(第2画面)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main">
    <TextView
        android:id="@+id/tvMenuName"
        android:text="" />
    <TextView
        android:id="@+id/tvMenuPrice"
        android:text="" />
</LinearLayout>

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

class MainActivity : AppCompatAcitivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ~ 省略 ~
        val lvMenu = findViewById<ListView>(R.id.lvMenu)

        // MutableListオブジェクトを生成してデータを入れていく
        val menuList: MutableList<MutableMap<String, String>> = mutableListOf()
        var menu = mutableMapOf("name" to "からあげ", "price" to "800円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "はんばーぐ", "price" to "850円")
        menuList.add(menu)

        // 
        val from = arrayOf("name", "price")
        val to = intArrayOf(android.R.id.text1, android.R.id.text2)
        val adapter = SimpleAdapter(this@MainActivity, menuList, android.R.layout.simple_list_item_2, from, to)
        lvMenu.adapter = adapter

        // 
        lvMenu.onItemClickListener = ListItemClickListener()
    }

    private inner class ListItemClickListener : AdapterView.OnItemClickListener {
        override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) {

            // タップされた行のデータ(メニュー名と金額)を取得
            val item = parent.getItemAtPosition(position) as MutableMap<String, String>
            val menuName = item["name"]
            val menuPrice = item["price"]

            // インテントオブジェクトを生成し、第2画面に送るデータを格納する
            val intent = Intent(this@MainActivity, SecondActivity::class.java)
            intent.putExtra("menuName", menuName)
            intent.putExtra("menuPrice", menuPrice)

            // 第2画面を起動する
            startActivity(intent)
        }
    }
}

SimpleAdapterはデータ構造としてMutableList<MutableMap<String, *>>を使います。(*には任意の型を指定できます。)

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

class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ~ 省略 ~
        val menuName = intent.getStringExtra("menuName")
        val menuPrice = intent.getStringExtra("menuPrice")
        val tvMenuName = findViewById<TextView>(R.id.tvMenuName)
        val tvMenuPrice = findViewById<TextView>(R.id.tvMenuPrice)
        
        // TextViewにメニュー名と金額を表示
        tvMenuName.text = menuName
        tvMenuPrice.text = menuPrice 
    }

}
BACK