前提・実現したいこと
書籍:『基礎&応用力をしっかり育成!Androidアプリ開発の教科書」
”8.1:オプションメニューとコンテキストメニュー”でビルド時のエラーが解決できず困っています。
ざっくりとした質問で申し訳ありません。
発生している問題・エラーメッセージ
failed app/src/main/java/com/example/kenta/menusample/MainActivity.kt Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Expecting member declaration Modifier 'private' is not applicable to 'local function' Unresolved reference: _menuList Unresolved reference: lvMenu Unresolved reference: _menuList Unresolved reference: ListItemClickListener 'onItemClick' overrides nothing
該当のソースコード
Kotlin
1【MainActivity.kt】 2 3package com.example.kenta.menusample 4 5import android.app.LauncherActivity 6import android.content.Intent 7import androidx.appcompat.app.AppCompatActivity 8import android.os.Bundle 9import android.view.View 10import android.view.ViewParent 11import android.widget.AdapterView 12import android.widget.ListView 13import android.widget.SimpleAdapter 14 15class MainActivity : AppCompatActivity() { 16 17 //リストビューに表示するリストデータ。 18 private var_menuList: MutableList<MutableMap<String, Any>>? = null 19 //SimpleAdapterの第4引数fromに使用する定数フィールド。 20 private val FROM = arrayOf("name", "price") 21 //SimpleAdapterの第5引数toに使用する定数フィールド。 22 private val TO = intArrayOf(R.id.tvMenuName, R.id.tvMenuPrice) 23 24 override fun onCreate(savedInstanceState: Bundle?) { 25 super.onCreate(savedInstanceState) 26 setContentView(R.layout.activity_main) 27 28 private fun createTeishokuList(): MutableList<MutableMap<String, Any>> { 29 //定食メニューリスト用のListオブジェクトを用意。 30 val menuList: MutableList<MutableMap<String, Any>> = mutableListOf() 31 //「から揚げ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 32 var menu = mutableMapOf("name" to "から揚げ定食", "price" to 800, "desc" to "若鶏のから揚げにサラダ、ご飯とお味噌汁がつきます。") 33 menuList.add(menu) 34 //「ハンバーグ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 35 menu = mutableMapOf("name" to "ハンバーグ定食", "price" to 850, "desc" to "手ごねハンバーグにサラダ、ご飯とお味噌汁がつきます。") 36 menuList.add(menu) 37 //「生姜焼き定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 38 menu = mutableMapOf("name" to "生姜焼き定食", "price" to 850, "desc" to "美味しい生姜焼きにサラダ、ご飯とお味噌汁がつきます。") 39 menuList.add(menu) 40 //「ステーキ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 41 menu = mutableMapOf("name" to "ステーキ定食", "price" to 1000, "desc" to "神戸牛のステーキにサラダ、ライスとスープがつきます。") 42 menuList.add(menu) 43 //「野菜炒め定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 44 menu = mutableMapOf("name" to "野菜炒め定食", "price" to 750, "desc" to "シャキシャキ野菜の野菜炒めにサラダ、ご飯とお味噌汁がつきます。") 45 menuList.add(menu) 46 //「とんかつ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 47 menu = mutableMapOf("name" to "とんかつ定食", "price" to 900, "desc" to "ジューシーとんかつにサラダ、ご飯とお味噌汁がつきます。") 48 menuList.add(menu) 49 //「ミンチカツ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 50 menu = mutableMapOf("name" to "ミンチカツ定食", "price" to 850, "desc" to "中はジューシーなミンチカツにサラダ、ご飯とお味噌汁がつきます。") 51 menuList.add(menu) 52 //「チキンカツ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 53 menu = mutableMapOf("name" to "チキンカツ定食", "price" to 900, "desc" to "中はジューシーなチキンカツにサラダ、ご飯とお味噌汁がつきます。") 54 menuList.add(menu) 55 //「コロッケ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 56 menu = mutableMapOf("name" to "コロッケ定食", "price" to 850, "desc" to "カニクリームコロッケにサラダ、ご飯とお味噌汁がつきます。") 57 menuList.add(menu) 58 //「焼き魚定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 59 menu = mutableMapOf("name" to "焼き魚定食", "price" to 850, "desc" to "サバの塩焼きにサラダ、ご飯とお味噌汁がつきます。") 60 menuList.add(menu) 61 //ここに繰り返し書く。 62 return menuList 63 64 //定食メニューはListオブジェクトをPrivateメソッドを利用して用意し、フィールドに格納。 65 _menuList = createTeishokuList() 66 //画面部品ListVierを取得。 67 val lvMenu = findViewById<ListView>(R.id.lvMenu) 68 //SimpleAdapterを生成。 69 val adapter = SimpleAdapter(applicationContext, _menuList, R.layout.row, FROM, TO) 70 //アダプタの登録。 71 lvMenu.adapter = adapter 72 //リストタップのリスナクラス登録 73 lvMenu.onItemClickListener = ListItemClickListener() 74 75 } 76 } 77 78 override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) { 79 //タップされた行のデータ取得。SimpleAdapterでは1行分のデータはMutableMap型! 80 val item = parent.getItemAtPosition(position) as MutableMap<String, Any> 81 //定食名と金額を取得。 82 val menuName = item["name"] as String 83 val menuPrice = item["price"] as Int 84 //インテントオブジェクトを生成。 85 val intent = Intent(applicationContext, MenuThanksActivity::class.java) 86 //第2画面に送るデータを格納 87 intent.putExtra("menuName", menuName) 88 intent.putExtra("menuPrice", "${menuPrice}円") 89 //第2画面の起動。 90 startActivity(intent) 91 } 92} 93 94 95「MenuThanksActivity.kt】 96 97package com.example.kenta.menusample 98 99import androidx.appcompat.app.AppCompatActivity 100import android.os.Bundle 101import android.view.View 102import android.widget.TextView 103 104class MenuThanksActivity : AppCompatActivity() { 105 106 override fun onCreate(savedInstanceState: Bundle?) { 107 super.onCreate(savedInstanceState) 108 setContentView(R.layout.activity_menu_thanks) 109 110 //リスト画面から渡されたデータを取得。 111 val menuName = intent.getStringExtra("menuName") 112 val menuPrice = intent.getStringExtra("menuPrice") 113 114 //定食名と金額を表示させるTextViewを取得。 115 val tvMenuName = findViewById<TextView>(R.id.tvMenuName) 116 val tvMenuPrice = findViewById<TextView>(R.id.tvMenuPrice) 117 118 //TextViewに定食名と金額を表示。 119 tvMenuName.text = menuName as String 120 tvMenuPrice.text = menuPrice as String 121 } 122 123 //戻るボタンをタップした時の処理。 124 fun onBackButtonClick(view: View) { 125 finish() 126 } 127} 128 129 130 131 132
試したこと
書籍の中でも、他のプログラムから必要な部分をコピー&ペーストしてくるように記載されていたのですが、
ここのあたりがちゃんと理解できずに間違えている可能性がありますが、見直したのですがわからず
初歩的な内容かもしれませんが質問させていただきました。どうぞ宜しくお願い致します。
補足情報(FW/ツールのバージョンなど)
Mac版 AndroidStudi3.6.3
回答1件
あなたの回答
tips
プレビュー