書籍:『基礎&応用力をしっかり育成!Androidアプリ開発の教科書」
”7.2:Androidの画面遷移”で表示されるリスト画面で選択するとアプリが強制終了されてしまう症状が解決できず困っています。
発生している問題・エラーメッセージ
エラーメッセージ
エラー表示なし。
リスト選択でアプリが強制終了。
該当のソースコード
言語名:Kotlin
ソースコード
【MainActivity.kt】
package com.example.kenta.intentsample
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ListView
import android.widget.SimpleAdapter
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //画面部品ListViewを取得 val lvMenu = findViewById<ListView>(R.id.lvMenu) //SimpleAdapterで使用するMutableListオブジェクトを用意。 val menuList: MutableList<MutableMap<String, String>> = mutableListOf() //「から揚げ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 var menu = mutableMapOf("name" to "から揚げ定食", "price" to "800円") menuList.add(menu) //「ハンバーグ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "ハンバーグ定食", "price" to "850円") menuList.add(menu) //「生姜焼き定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "生姜焼き定食", "price" to "850円") menuList.add(menu) //「ステーキ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "ステーキ定食", "price" to "1000円") menuList.add(menu) //「野菜炒め定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "野菜炒め定食", "price" to "750円") menuList.add(menu) //「とんかつ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "とんかつ定食", "price" to "900円") menuList.add(menu) //「ミンチかつ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "ミンチかつ定食", "price" to "850円") menuList.add(menu) //「チキンカツ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "チキンカツ定食", "price" to "900円") menuList.add(menu) //「コロッケ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "コロッケ定食", "price" to "850円") menuList.add(menu) //「焼き魚定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "焼き魚定食", "price" to "750円") menuList.add(menu) //SimpleAdapter第4引数from用データの用意。 val from = arrayOf("name", "price") //SimpleAdapter第5引数to用データの用意。 val to = intArrayOf(android.R.id.text1, android.R.id.text2) //SimpleAdapterを生成。 val adapter = SimpleAdapter(applicationContext, 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) { //タップされた行のデータを取得。SimpleAdapterでは1行分のデータはMutableMap型! val item = parent.getItemIdAtPosition(position) as MutableMap<String, String> //定食名と金額を取得。 val menuName = item["name"] val menuPrice = item["price"] //インテントオブジェクトを生成。 val intent = Intent(applicationContext, MenuThanksActivity::class.java) //第2画面に送るデータを格納。 intent.putExtra("menuName", menuName) intent.putExtra("menuPrice", menuPrice) //第2画面の起動。 startActivity(intent) } }
}
【MenuThanksActivity.kt】
package com.example.kenta.intentsample
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.TextView
class MenuThanksActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_menu_thanks) //リスト画面から渡されたデータを取得。 val menuName = intent.getStringExtra("menuName") val menuPrice = intent.getStringExtra("menuPrice") //定食名と金額を表示させるTextViewを取得。 val tvMenuName = findViewById<TextView>(R.id.tvMenuName) val tvMenuPrice = findViewById<TextView>(R.id.tvMenuPrice) //TextViewに定食名と金額を表示。 tvMenuName.text = menuName tvMenuPrice.text = menuPrice } //戻るボタンをタップした時の処理。 fun onBackButtonClick(view: View){ finish() }
}
【activity_main.xml】
<?xml version="1.0" encoding="utf-8"?><ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/lvMenu" android:layout_width="match_parent" android:layout_height="match_parent"/>
【activity_menu_thanks.xml】
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
</LinearLayout><TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_gravity="center" android:text="@string/tv_thx_title" android:textSize="25sp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:text="@string/tv_thx_desc" android:textSize="15sp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/tvMenuName" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:id="@+id/tvMenuPrice" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onBackButtonClick" android:text="@string/bt_thx_back"/>
試したこと
先ほどソースコードを貼り付けたつもりですが、貼り付けできておりませんでした。
申し訳ありません。
補足情報(FW/ツールのバージョンなど)
Mac版 AndroidStudi3.6.3
回答1件
あなたの回答
tips
プレビュー