質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

3360閲覧

ビルド時のエラーが解決できず困っています

kenta0228

総合スコア20

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/05/14 02:32

前提・実現したいこと

書籍:『基礎&応用力をしっかり育成!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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/05/14 11:52

> ちゃんと理解できずに間違えている可能性がありますが、見直したのですがわからず 初めから(理解しながら)やり直しては如何でしょうか. 少なくとも何をコピペしているのかを理解していなくては, 見直しても分からないままでしょう.
kenta0228

2020/05/15 03:06

その通りですね。もう一度初めから見直してみるようにします。
guest

回答1

0

ベストアンサー

ソースを見た限り、

kotlin

1override fun onCreate(savedInstanceState: Bundle?) { 2 super.onCreate(savedInstanceState) 3 setContentView(R.layout.activity_main) 4 ... 5} 6

の中に

kotlin

1private fun createTeishokuList(): MutableList<MutableMap<String, Any>> { 2 ... 3}

のメソッドが入れ子になってしまっているので、まず createTeishokuList() メソッドを外に出してあげてください。
(メソッドの入れ子は出来なくはないですが、ここで求められている書き方ではない気がするので)

kotlin

1//定食メニューはListオブジェクトをPrivateメソッドを利用して用意し、フィールドに格納。 2_menuList = createTeishokuList()

の箇所で createTeishokuList() を呼び出しているので、その上まででメソッドが切れるのではないでしょうか?
return 文もありますし)
まとめると以下のようになると思います。

kotlin

1 override fun onCreate(savedInstanceState: Bundle?) { 2 super.onCreate(savedInstanceState) 3 setContentView(R.layout.activity_main) 4 5 //定食メニューはListオブジェクトをPrivateメソッドを利用して用意し、フィールドに格納。 6 _menuList = createTeishokuList() 7 〜以下元ソースと同じなので省略〜 8 } 9 10 private fun createTeishokuList(): MutableList<MutableMap<String, Any>> { 11 〜createTeishokuListの処理〜 12 13 return menuList 14 }

投稿2020/05/14 07:32

m-coder

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenta0228

2020/05/14 08:57

ありがとうございます。試してみましたがいまいちエラーの状況は変わりませんでした。 特に override fun onCreate(savedInstanceState: Bundle?) の中が赤字になっているのが多い気がします。 【MainActivity.kt】 package com.example.kenta.menusample import android.app.LauncherActivity import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.view.ViewParent import android.widget.AdapterView import android.widget.ListView import android.widget.SimpleAdapter class MainActivity : AppCompatActivity() { //リストビューに表示するリストデータ。 private var_menuList: MutableList<MutableMap<String, Any>>? = null //SimpleAdapterの第4引数fromに使用する定数フィールド。 private val FROM = arrayOf("name", "price") //SimpleAdapterの第5引数toに使用する定数フィールド。 private val TO = intArrayOf(R.id.tvMenuName, R.id.tvMenuPrice) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //定食メニューはListオブジェクトをPrivateメソッドを利用して用意し、フィールドに格納。 _menuList = createTeishokuList() //画面部品ListVierを取得。 val lvMenu = findViewById<ListView>(R.id.lvMenu) //SimpleAdapterを生成。 val adapter = SimpleAdapter(applicationContext, _menuList, R.layout.row, FROM, TO) //アダプタの登録。 lvMenu.adapter = adapter //リストタップのリスナクラス登録 lvMenu.onItemClickListener = ListItemClickListener() } private fun createTeishokuList(): MutableList<MutableMap<String, Any>> { //定食メニューリスト用のListオブジェクトを用意。 val menuList: MutableList<MutableMap<String, Any>> = mutableListOf() //「から揚げ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 var menu = mutableMapOf("name" to "から揚げ定食", "price" to 800, "desc" to "若鶏のから揚げにサラダ、ご飯とお味噌汁がつきます。") menuList.add(menu) //「ハンバーグ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf( "name" to "ハンバーグ定食", "price" to 850, "desc" to "手ごねハンバーグにサラダ、ご飯とお味噌汁がつきます。" ) menuList.add(menu) //「生姜焼き定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "生姜焼き定食", "price" to 850, "desc" to "美味しい生姜焼きにサラダ、ご飯とお味噌汁がつきます。") menuList.add(menu) //「ステーキ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf( "name" to "ステーキ定食", "price" to 1000, "desc" to "神戸牛のステーキにサラダ、ライスとスープがつきます。" ) menuList.add(menu) //「野菜炒め定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf( "name" to "野菜炒め定食", "price" to 750, "desc" to "シャキシャキ野菜の野菜炒めにサラダ、ご飯とお味噌汁がつきます。" ) menuList.add(menu) //「とんかつ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf( "name" to "とんかつ定食", "price" to 900, "desc" to "ジューシーとんかつにサラダ、ご飯とお味噌汁がつきます。" ) menuList.add(menu) //「ミンチカツ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf( "name" to "ミンチカツ定食", "price" to 850, "desc" to "中はジューシーなミンチカツにサラダ、ご飯とお味噌汁がつきます。" ) menuList.add(menu) //「チキンカツ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf( "name" to "チキンカツ定食", "price" to 900, "desc" to "中はジューシーなチキンカツにサラダ、ご飯とお味噌汁がつきます。" ) menuList.add(menu) //「コロッケ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf( "name" to "コロッケ定食", "price" to 850, "desc" to "カニクリームコロッケにサラダ、ご飯とお味噌汁がつきます。" ) menuList.add(menu) //「焼き魚定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。 menu = mutableMapOf("name" to "焼き魚定食", "price" to 850, "desc" to "サバの塩焼きにサラダ、ご飯とお味噌汁がつきます。") menuList.add(menu) //ここに繰り返し書く。 return menuList } override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) { //タップされた行のデータ取得。SimpleAdapterでは1行分のデータはMutableMap型! val item = parent.getItemAtPosition(position) as MutableMap<String, Any> //定食名と金額を取得。 val menuName = item["name"] as String val menuPrice = item["price"] as Int //インテントオブジェクトを生成。 val intent = Intent(applicationContext, MenuThanksActivity::class.java) //第2画面に送るデータを格納 intent.putExtra("menuName", menuName) intent.putExtra("menuPrice", "${menuPrice}円") //第2画面の起動。 startActivity(intent) } } 【エラー内容】 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 Unresolved reference: _menuList Unresolved reference: lvMenu Unresolved reference: _menuList Unresolved reference: ListItemClickListener 'onItemClick' overrides nothing
m-coder

2020/05/14 10:20 編集

とりあえずですが、Android Studio上で赤字になっている箇所はよく見てみましょう。 `Unresolved reference: ` というエラーは文字通り「参照が解決されない」という事なので、参照している変数や関数の宣言、もしくは呼び出し方に問題がある場合が多いです。 ``` private var_menuList: MutableList<MutableMap<String, Any>>? = null ``` 例えば上の行ですが、 var と _menuList の間に半角スペースが空いていません。 このため、_menuListという変数がちゃんと宣言できていないせいでエラーが出ていると思います。 ``` Unresolved reference: _menuList ``` このエラーですね。 あとは、 `ListItemClickListener()` というところが赤字になっていると思いますが、 そもそも `ListItemClickListener` というクラスを作っていないように思います。 コピーする内容が不足していませんか? 書籍の「ListItemClickListener」というクラスが出てくるところを見直してみる事をオススメします。 (おそらく `onItemClick()` というメソッドはそのクラス内に無いとダメなメソッドだと思います) あとは、プログラミング系の書籍であればネットからサンプルコードがダウンロード可能なものも多いので、サンプルコードが無いか確認してみてはいかがでしょう? たいていは書籍の冒頭にサンプルコードがダウンロードできるサイトのURLが記載されていると思います。 (無かったらすみません)
kenta0228

2020/05/15 03:05

ありがとうございます。サンプルコードをDLして確認して試行錯誤していくようにします。 いろいろとお教えいただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問