前提・実現したいこと
Android Studioでメニューリストをprivateメソッド化したいです。
言語はjavaです。
書籍を参照しながら、学習しているのですが、定食メニューリストをprivateメソッド化したいです。
privateメソッド化することで、表示されるメニューリストの切り替え処理を行いたいのですが、
Variable 'createTeishokuList' is never used
というエラーが表示されてしまいます。
一番上の @Override の直下にあたる、
private List<Map<String, Object>> createTeishokuList {
の "createTeishokuList" の部分です。上から15行目くらいの位置になります。
下記にコードを記載いたします。
また、他の部分にもエラーが出ているため、下記に記載させていただきます。
(createTeishokuList の部分にエラーが出ているため、それに付随してエラーになっているのかもしれません。)
ちなみに、書籍のandroid studioはver3.0ですので、現在のversionとの違いによって、書き方に違いがあるのかもしれません。
試したこと・調べたこと
調べたと言えるレベルではないのですが、他のページや参考にできそうなサイトを見る限り、
List<Map<String, Object>> data = new ArrayList<>();
というような記述が多く見られるため、そもそも private の後に書くこと自体、間違いなのではないか
と感じています。
長文で大変読みにくく、また、もっと自力で調べた方が良いとご指摘を受けるかとは思いますが、質問させていただきました。
ご回答いただければ幸いです。
どうぞ宜しくお願いいたします。
コード
Java
1public class MainActivity extends AppCompatActivity { 2 // リストビューを表すフィールド 3 private ListView _lvMenu; 4 // リストビューに表示するリストデータ 5 private List<Map<String, Object>> _menuList; 6 // SimpleAdapterの第4引数fromに使用する定数フィールド 7 private static final String[] FROM = {"name", "price"}; 8 // SimpleAdapterの第5引数toに使用する定数フィールド 9 private static final int[] TO = {R.id.tvMenuName, R.id.tvMenuPrice}; 10 11 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_main); 16 17 private List<Map<String, Object>> createTeishokuList { 18 // 定食メニューリスト用のListオブジェクトを用意 19 List<Map<String, Object>> menuList = new ArrayList<>(); 20 // 「から揚げ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録 21 Map<String, Object> menu = new HashMap<>(); 22 menu.put("name", "から揚げ定食"); 23 menu.put("price", 800); 24 menu.put("desc", "若鳥のから揚げにサラダ、ご飯と味噌汁がつきます"); 25 menuList.add(menu); 26 // 27 menu = new HashMap<>(); 28 menu.put("name", "ハンバーグ定食"); 29 menu.put("price", 850); 30 menu.put("desc", "手ごねハンバーグにサラダ、ご飯と味噌汁がつきます"); 31 menuList.add(menu); 32 // 33 menu = new HashMap<>(); 34 menu.put("name", "生姜焼き定食"); 35 menu.put("price", 780); 36 menu.put("desc", "豚の生姜焼きにサラダ、ご飯と味噌汁がつきます"); 37 menuList.add(menu); 38 // 39 menu = new HashMap<>(); 40 menu.put("name", "野菜炒め定食"); 41 menu.put("price", 700); 42 menu.put("desc", "野菜炒めにサラダ、ご飯と味噌汁がつきます"); 43 menuList.add(menu); 44 // 45 menu = new HashMap<>(); 46 menu.put("name", "焼き魚定食"); 47 menu.put("price", 880); 48 menu.put("desc", "旬の焼き魚にサラダ、ご飯と味噌汁がつきます"); 49 menuList.add(menu); 50 return; 51 52 // 画面部品ListViewを取得し、フィールドに格納 53 _lvMenu = findViewById(R.id.lvMenu); 54 // 定食メニューListオブジェクトをprivateメソッドを利用して用意し、フィールドに格納 55 _menuList = createTeishokuList(); 56 // SimpleAdapterを生成 57 SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, _menuList, R.layout.row, FROM, TO); 58 // アダプタの登録 59 _lvMenu.setAdapter(adapter); 60 // リストタップのリスナクラス登録 61 _lvMenu.setOnItemClickListener(new ListItemClickListener()); 62 } 63 private class ListItemClickListener implements AdapterView.OnItemClickListener { 64 @Override 65 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 66 // タップされた行のデータを取得 67 Map<String, Object> item = (Map<String, Object>) parent.getItemAtPosition(position); 68 // 定食名と金額を取得。Mapの値部分がObject型なのでキャストが必要 69 String menuName = (String) item.get("name"); 70 Integer menuPrice = (Integer) item.get("price"); 71 72 // インテントオブジェクトを生成 73 Intent intent = new Intent(MainActivity.this, MenuThanksActivity.class); 74 // 第2画面に送るデータを格納 75 intent.putExtra("menuName", menuName); 76 // MenuThanksActivityでのデータ受け取りと合わせるために金額にここで「円」を追加 77 intent.putExtra("menuPrice", menuPrice + "円"); 78 // 第2画面の起動 79 startActivity(intent); 80 } 81 } 82 83 } 84}
エラー部分
上から15行目
private List<Map<String, Object>> createTeishokuList {
の "createTeishokuList" の部分に、"Variable 'createTeishokuList' is never used" のエラー表示。
上らか53行目(コードの上から2/3あたりの位置の return; の後)
_menuList = createTeishokuList();
の"createTeishokuList()"の部分に、"Method call expected"のエラー表示。
上から59行目
_lvMenu.setOnItemClickListener(new ListItemClickListener());
の"ListItemClickListener()" の部分に、"cannot resolve symbol 'ListItemClickListener'" のエラー表示。
上から61行目
private class ListItemClickListener implements AdapterView.OnItemClickListener {
の "private" の部分に、"Modifier 'private' not allowed here"のエラー表示。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。