画面遷移(MutableListのデータを渡す)
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
}
}