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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

Q&A

解決済

1回答

1113閲覧

1つのspinnerの選択を受けて、もう1つのspinnerを変化させたい(Androidstudio)

tanaka_hana

総合スコア19

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

0グッド

0クリップ

投稿2018/12/20 12:19

編集2018/12/26 07:15

前提・実現したいこと

画面内に2つのspinnerを用意して一つのspinnerを受けて、もう一つのspinnerが変化するようなプログラムを作りたいです。具体的には、ある好きな食べ物のジャンル(中華やイタリアンなど)を選択すると、もう一つのspinnerにそのジャンルのメニューが出てくる(イタリアンなら、パスタやドリアなど)という具合です。

発生している問題・エラーメッセージ

食べ物のジャンルを入れるspinnerはリストを用意し、adapterを使い、そのspinnerに設定できました。
しかし、もう一つのジャンルを受けてメニューを表示させるspinnerで問題が生じています。switch文を使い、各ジャンルのメニューを生成するメソッドを使って、メニューを分岐させているのですが、うまくいきません。
起動時でアプリが強制終了します。

Error

1java.lang.RuntimeException: Unable to start activity ComponentInfo{com.websarva.wings.adroid.samplespinner_eating/com.websarva.wings.adroid.samplespinner_eating.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()'

該当のソースコード(java)

java

1public class MainActivity extends AppCompatActivity { 2 3 private Spinner menu_genre_spinner; 4 private Spinner menu_spinner; 5 6 private List<Map<String,String>> menu_genreList; 7 private List<Map<String,String>> menuList; 8 9 private static final String[] menugenre_FROM={"menu_genre","spot"}; 10 private static final int[] menugenre_TO={R.id.menu_genre,R.id.spot}; 11 12 private static final String[] menu_FROM={"menu","price"}; 13 private static final int[] menu_TO={R.id.menu,R.id.price}; 14 15 private String genre; 16 private String spot; 17 18 private String menu; 19 private String price; 20 21 @Override 22 protected void onCreate(Bundle savedInstanceState) { 23 super.onCreate(savedInstanceState); 24 setContentView(R.layout.activity_main); 25 26 menu_genreList=createMenuGenre(); 27 menuList=createMenu(); 28 29 30 SimpleAdapter menugenre_adapter=new SimpleAdapter(MainActivity.this,menu_genreList,R.layout.menugenrelist,menugenre_FROM,menugenre_TO); 31 menu_genre_spinner=findViewById(R.id.menu_genre_spinner); 32 menu_genre_spinner.setAdapter(menugenre_adapter); 33 menu_genre_spinner.setPrompt("ジャンルを選択してください"); 34 menu_genre_spinner.setOnItemSelectedListener(new spinnerMenuGenreListener()); 35 36 SimpleAdapter menu_adapter=new SimpleAdapter(MainActivity.this,menuList,R.layout.menulist,menu_FROM,menugenre_TO); 37 menu_spinner=findViewById(R.id.menu_spinner); 38 menu_spinner.setAdapter(menu_adapter); 39 menu_spinner.setPrompt("メニューを選択してください"); 40 menu_spinner.setOnItemSelectedListener(new spinnerMenuListener()); 41 42 } 43 44 private List<Map<String,String>> createMenuGenre(){ 45 List<Map<String,String>> MenuGenreList=new ArrayList<>(); 46 //HashMapでMenuGenreを作成 47 Map<String,String> MenuGenre=new HashMap<>(); 48 MenuGenre.put("menu_genre","イタリアン"); 49 MenuGenre.put("spot","サイゼリア"); 50 MenuGenreList.add(MenuGenre); 51 52 MenuGenre=new HashMap<>(); 53 MenuGenre.put("menu_genre","中華料理"); 54 MenuGenre.put("spot","王将"); 55 MenuGenreList.add(MenuGenre); 56 57 MenuGenre=new HashMap<>(); 58 MenuGenre.put("menu_genre","タイ料理"); 59 MenuGenre.put("spot","バーミヤン"); 60 MenuGenreList.add(MenuGenre); 61 62 //ArrayList(menu_genre,spot)を返す 63 return MenuGenreList; 64 } 65 66 //ここでジャンルによってメニューが変わる 67 private List<Map<String,String>> createMenu(){ 68 69 List<Map<String,String>> menuList=new ArrayList<>(); 70 switch (genre){ 71 72 case "イタリアン": 73 menuList=createMenu_itarian(); 74 break; 75 case "中華料理": 76 menuList=createMenu_chuka(); 77 break; 78 } 79 80 return menuList; 81 } 82 83 private List<Map<String,String>> createMenu_itarian(){ 84 List<Map<String,String>> MenuList=new ArrayList<>(); 85 86 Map<String,String> menu=new HashMap<>(); 87 menu.put("menu","ピザ"); 88 menu.put("price","800"); 89 MenuList.add(menu); 90 91 menu=new HashMap<>(); 92 menu.put("menu","パスタ"); 93 menu.put("price","750円"); 94 MenuList.add(menu); 95 96 menu=new HashMap<>(); 97 menu.put("menu","ドリア"); 98 menu.put("price","500円"); 99 MenuList.add(menu); 100 101 return MenuList; 102 } 103 104 private List<Map<String,String>> createMenu_chuka(){ 105 List<Map<String,String>> MenuList=new ArrayList<>(); 106 107 Map<String,String> menu=new HashMap<>(); 108 menu.put("menu","餃子"); 109 menu.put("price","300円"); 110 MenuList.add(menu); 111 112 menu=new HashMap<>(); 113 menu.put("menu","ラーメン"); 114 menu.put("price","750円"); 115 MenuList.add(menu); 116 117 menu=new HashMap<>(); 118 menu.put("menu","天津飯"); 119 menu.put("price","600円"); 120 MenuList.add(menu); 121 122 return MenuList; 123 } 124 125 126 private class spinnerMenuGenreListener implements AdapterView.OnItemSelectedListener{ 127 128 @Override 129 public void onItemSelected(AdapterView<?> parent,View view,int position,long id){ 130 Map<String,String> item=(Map<String, String>) parent.getItemAtPosition(position); 131 genre=(String) item.get("menu_genre"); 132 spot=(String ) item.get("spot"); 133 } 134 135 @Override 136 public void onNothingSelected(AdapterView<?> parent){ 137 138 } 139 } 140 141 private class spinnerMenuListener implements AdapterView.OnItemSelectedListener{ 142 143 @Override 144 public void onItemSelected(AdapterView<?> parent,View view,int position,long id){ 145 Map<String,String> item=(Map<String, String>) parent.getItemAtPosition(position); 146 menu=(String) item.get("menu"); 147 price=(String ) item.get("price"); 148 } 149 150 @Override 151 public void onNothingSelected(AdapterView<?> parent){ 152 153 } 154 } 155}

該当のソースコード(レイアウト)

その他のメニューのジャンルの独自レイアウトファイルにはmenu_genreとspot、その他のメニューの独自レイアウトファイルにはmenu、priceのテキストビューが用意されています。

xml

1<?xml version="1.0" encoding="utf-8"?> 2<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <TextView 10 android:id="@+id/tvMenu_genre" 11 android:layout_width="0dp" 12 android:layout_height="wrap_content" 13 android:layout_marginStart="8dp" 14 android:layout_marginLeft="8dp" 15 android:layout_marginTop="16dp" 16 android:text="食べ物のジャンルを選択してください" 17 android:textSize="22sp" 18 app:layout_constraintEnd_toEndOf="parent" 19 app:layout_constraintStart_toStartOf="parent" 20 app:layout_constraintTop_toTopOf="parent" /> 21 22 <Spinner 23 android:id="@+id/menu_genre_spinner" 24 android:layout_width="0dp" 25 android:layout_height="0dp" 26 android:layout_marginStart="8dp" 27 android:layout_marginLeft="8dp" 28 android:layout_marginTop="8dp" 29 android:layout_marginEnd="8dp" 30 android:layout_marginRight="8dp" 31 android:layout_marginBottom="8dp" 32 android:dropDownWidth="match_parent" 33 android:spinnerMode="dialog" 34 app:layout_constraintBottom_toTopOf="@+id/guideline2" 35 app:layout_constraintEnd_toEndOf="parent" 36 app:layout_constraintStart_toStartOf="parent" 37 app:layout_constraintTop_toBottomOf="@+id/tvMenu_genre" /> 38 39 <android.support.constraint.Guideline 40 android:id="@+id/guideline2" 41 android:layout_width="wrap_content" 42 android:layout_height="wrap_content" 43 android:orientation="horizontal" 44 app:layout_constraintGuide_percent="0.2" /> 45 46 <TextView 47 android:id="@+id/tvMenu" 48 android:layout_width="wrap_content" 49 android:layout_height="wrap_content" 50 android:layout_marginStart="16dp" 51 android:layout_marginLeft="16dp" 52 android:layout_marginTop="16dp" 53 android:text="食べ物を選択してください" 54 android:textSize="22sp" 55 app:layout_constraintStart_toStartOf="parent" 56 app:layout_constraintTop_toTopOf="@+id/guideline2" /> 57 58 <Spinner 59 android:id="@+id/menu_spinner" 60 android:layout_width="0dp" 61 android:layout_height="0dp" 62 android:layout_marginStart="8dp" 63 android:layout_marginLeft="8dp" 64 android:layout_marginTop="8dp" 65 android:layout_marginEnd="8dp" 66 android:layout_marginRight="8dp" 67 android:layout_marginBottom="8dp" 68 android:spinnerMode="dialog" 69 app:layout_constraintBottom_toTopOf="@+id/guideline3" 70 app:layout_constraintEnd_toEndOf="parent" 71 app:layout_constraintStart_toStartOf="parent" 72 app:layout_constraintTop_toBottomOf="@+id/tvMenu" /> 73 74 <android.support.constraint.Guideline 75 android:id="@+id/guideline3" 76 android:layout_width="wrap_content" 77 android:layout_height="wrap_content" 78 android:orientation="horizontal" 79 app:layout_constraintGuide_percent="0.4" /> 80 81 <View 82 android:layout_width="fill_parent" 83 android:layout_height="3dp" 84 android:background="@android:color/darker_gray" 85 app:layout_constraintTop_toTopOf="@id/guideline2"/> 86 87 <View 88 android:layout_width="fill_parent" 89 android:layout_height="3dp" 90 android:background="@android:color/darker_gray" 91 app:layout_constraintTop_toTopOf="@id/guideline3"/> 92 93</android.support.constraint.ConstraintLayout>

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

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

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

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

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

guest

回答1

0

自己解決

spinnerwを選択した時のメソッド内に新たリストを作成するメソッドとアダプタとその設定をを書いたら、無事エラーは出ずに起動しました。

投稿2018/12/26 07:55

tanaka_hana

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問