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

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

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

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

Android Studio

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

Q&A

解決済

1回答

2171閲覧

androidstudio spinnerで選択されたデータをtextviewに反映させたい

karin10

総合スコア34

Java

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

Android Studio

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

0グッド

0クリップ

投稿2020/07/19 06:36

前提・実現したいこと

男女別に必要な栄養を計算しようとしています。
AndroidStudio内で作成したspinnerの項目のデータを元にボタンクリック後にtextviewに反映させたい。
項目は男性、女性の2つです。

イメージ説明

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

app has stopped open app again

該当のソースコード

activitymain

1//この項目のデータを参照したい 2<Spinner 3 android:id="@+id/spinnerSex" 4 android:layout_width="98dp" 5 android:layout_height="32dp" 6 android:layout_marginTop="150dp" 7 android:layout_marginEnd="62dp" 8 android:layout_marginRight="62dp" 9 android:background="@drawable/grid_border" 10     android:entries="@array/list1" 11 /> 12 13//ここに参照させたい 14<TextView 15 android:id="@+id/calorieForm" 16 android:layout_width="294dp" 17 android:layout_height="wrap_content" 18 android:layout_row="1" 19 android:layout_column="1" 20 android:background="@drawable/grid_border" 21 android:gravity="center" />

strings

1<resources> 2string name="app_name">Eiyoukun</string> 3 <string-array name="list1"> 4 <item>男性</item>> 5 <item>女性</item>> 6 </string-array> 7 > 8strings.xml 9</resources>

mainactivity

1import android.annotation.SuppressLint; 2import android.os.Bundle; 3import android.widget.ArrayAdapter; 4import android.widget.EditText; 5import android.widget.Spinner; 6import android.widget.TextView; 7import androidx.appcompat.app.AppCompatActivity; 8 9public class MainActivity extends AppCompatActivity { 10 11 Spinner spinner2; 12 private String spinnerSex[] = {"男性", "女性"}; 13 14@Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 19 spinner2 = (Spinner)findViewById(R.id.spinnerSex); 20 21public void onClickButton(android.view.View view) { 22 TextView calorieForm = (TextView)this.findViewById(R.id.calorieForm); 23 @SuppressLint("WrongViewCast") EditText spinner2 = this.findViewById(R.id.spinnerSex); 24     EditText ageForm = (EditText)this.findViewById(R.id.ageForm); 25 EditText weightForm = (EditText)this.findViewById(R.id.weightForm); 26 EditText heightForm = (EditText)this.findViewById(R.id.heightForm); 27 28 29 String strAge; 30 strAge = weightForm.getText().toString(); 31 String strWeight; 32 strWeight = weightForm.getText().toString(); 33 String strHeight; 34 strHeight = weightForm.getText().toString(); 35 36 double calorie, protein, carbon, fat, age, weight, height; 37 age = Double.parseDouble(strAge); 38 weight = Double.parseDouble(strWeight); 39 height = Double.parseDouble(strHeight); 40 41if (spinnerSex.equals("男性") ){ 42 calorie = 13.397 * weight + 4.799 * height - 5.677 * age + 88.362; 43 } else { 44 calorie = 9.247 * weight + 3.098 * height - 4.33 * age + 447.593; 45 } 46 47 String msg0 = calorie + "cal"; 48 calorieForm.setText(msg0); 49 } 50 51 52}

試したこと

terarailで似た内容の質問"android 複数項目のspinnerからのデータ取得方法についての質問"を参考にしましたが、
//spinner
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerPrice);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

のadapterでエラーが起きてしまいました。

import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;

のinportが出来ないのが原因だと思いました。

補足情報(FW/ツールのバージョンなど)

java8, AndroidStudio4.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

SpinnerのコンポーネントをEditText型で得ても、選択した要素の文字列を正しく得ることはできません。

java

1 @SuppressLint("WrongViewCast") EditText spinner2 = this.findViewById(R.id.spinnerSex);

上記のように@SuppressLintを付けて強引にエラーを消しても、この要素にアクセスした途端にアプリは落ちるでしょう。

下記のように、Spinner型として値を得て、getSelectedItem()を用いれば選択した文字列を得ることができるでしょう。

java

1 Spinner spinner = findViewById(R.id.spinnerSex); 2 3 (中略) 4 5 if (spinner.getSelectedItem().toString().equals("男性")) { 6 calorie = 13.397 * weight + 4.799 * height - 5.677 * age + 88.362; 7 } else { 8 calorie = 9.247 * weight + 3.098 * height - 4.33 * age + 447.593; 9 } 10

或いは、getSelectedItemId()を用いて選択肢のID(一番上が0で下に行くと1つず増える)を取得して数値として比較するのがシンプルかもしれません。

java

1 if (spinner.getSelectedItemId() == 0) { 2 calorie = 13.397 * weight + 4.799 * height - 5.677 * age + 88.362; 3 } else { 4 calorie = 9.247 * weight + 3.098 * height - 4.33 * age + 447.593; 5 }

投稿2020/07/19 07:44

編集2020/07/19 07:50
keicha_hrs

総合スコア6766

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

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

karin10

2020/07/19 12:57

一つ目のspinner型を参考にして調べたりした結果、表示されました! ありがとうございます! ```mainActivity Spinner spinner = (Spinner)findViewById(R.id.spinnerSex); int idx = spinner.getSelectedItemPosition(); String item = (String)spinner.getSelectedItem(); (中略) if (item.equals("男性")) { calorie = 13.397 * weight + 4.799 * height - 5.677 * age + 88.362; } else { calorie = 9.247 * weight + 3.098 * height - 4.33 * age + 447.593; } ```
keicha_hrs

2020/07/19 14:20

インデックスを得るのはgetSelectedItemId()じゃなくてgetSelectedItemPosition()でしたね、失礼・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問