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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android

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

Android Studio

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

Kotlin

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

Q&A

解決済

1回答

2165閲覧

Kotlinでプルダウン(spinner)で選択した項目のデータを遷移後の画面で表示させる方法について

退会済みユーザー

退会済みユーザー

総合スコア0

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android

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

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2020/02/12 10:30

編集2020/02/19 09:42

前提・実現したいこと

Kotlinでプルダウン(spinner)で選択した項目のデータを遷移後の画面で表示させようとしています。

[Android & Kotlin] プルダウンで項目選択できるSpinnerを設定という記事と「アプリの画面遷移とActivity間のデータ転送」のプログラムを組み合わせ用としています。

具体的には、private val spinnerItems = arrayOf("Spinner", "Android", "Apple", "Windows")のプルダウンの中からユーザによって選ばれた項目を、ボタン遷移後のページで表示させたいです。

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

ビルドでエラーは出ず、エミュレータで実行できるのですが、Mainページでフォーム(EditText)に入力し、プルダウン(spinner)を選択して、ボタンを押すと、Subページに移動せずにアプリが終了してAndroidのホーム画面が表示されてしまう問題が解決できません。

ご回答を受けての修正とエラー

スピナーで選択した項目のデータが移行先のページで表示されません

MainActivity.kt

kotlin

1package com.example.sample 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.app.Activity 6import android.content.Intent 7import android.util.Log 8import android.view.View 9import android.widget.AdapterView 10import android.widget.Spinner 11import android.widget.ArrayAdapter 12import kotlinx.android.synthetic.main.activity_main.* 13import android.widget.AdapterView.OnItemSelectedListener 14 15class MainActivity : AppCompatActivity() { 16 17 companion object { 18 const val EXTRA_MESSAGE = "com.example.kotlinactivitydatatrans.MESSAGE" 19 const val EXTRA_SPINNER_RESULT = "com.example.kotlinactivitydatatrans.SPINNER_RESULT" 20 } 21 22 //フォームからのデータ 23 private val RESULT_SUBACTIVITY = 1000 24 // スピナーの選択肢 25 private val spinnerItems = arrayOf("Spinner", "Android", "Apple", "Windows") 26 var setectedItem: String ="Spinner" 27 28 override fun onCreate(savedInstanceState: Bundle?) { 29 super.onCreate(savedInstanceState) 30 setContentView(R.layout.activity_main) 31 32 val spinner = findViewById<Spinner>(R.id.spinner) 33 34 // ArrayAdapter 35 val adapter = ArrayAdapter(applicationContext, 36 android.R.layout.simple_spinner_item, spinnerItems) 37 38 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) 39 40 // spinner に adapter をセット 41 // Kotlin Android Extensions 42 spinner.adapter = adapter 43 44 // リスナーを登録 45 spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{ 46 // アイテムが選択された時 47 override fun onItemSelected(parent: AdapterView<*>?, 48 view: View?, position: Int, id: Long) { 49 val spinnerParent = parent as Spinner 50 val item = spinnerParent.selectedItem as String 51 // Kotlin Android Extensions 52 setectedItem = item 53 } 54 55 // アイテムが選択されなかった 56 override fun onNothingSelected(parent: AdapterView<*>?) { 57 // 58 } 59 } 60 61 //ボタンが押されたらデータをsubページに移動する 62 button.setOnClickListener { 63 if (editText.text != null) { 64 val intent = Intent(applicationContext, SubActivity::class.java) 65 val str = editText.text.toString() 66 val spinner_result = setectedItem 67 Log.d("debug",str) 68 69 intent.putExtra(EXTRA_MESSAGE, str) 70 intent.putExtra(EXTRA_SPINNER_RESULT, spinner_result) 71 startActivityForResult(intent, RESULT_SUBACTIVITY) 72 editText.setText("") 73 74 } 75 } 76 } 77 78 79 80}

SubActivity.kt

kotlin

1package com.example.sample 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.app.Activity 6import android.content.Intent 7//import kotlinx.android.synthetic.main.activity_main.* 8import kotlinx.android.synthetic.main.activity_sub.* 9 10class SubActivity : AppCompatActivity() { 11 12 override fun onCreate(savedInstanceState: Bundle?) { 13 super.onCreate(savedInstanceState) 14 setContentView(R.layout.activity_sub) 15 16 // to get message from MainActivity 17 val intent = getIntent() 18 val message = intent.extras?.getString(MainActivity.EXTRA_MESSAGE)?:"" 19 val spinner_result = intent.extras?.getString(MainActivity.EXTRA_SPINNER_RESULT)?:"" 20 21 textView.text = message 22 //textView.text = spinner_result 23 24 //移動前のページに遷移後の画面から入力された文字列を返す 25 button.setOnClickListener{ 26 val intentSub = Intent() 27 28 if (editText.text != null) { 29 val str = message + editText.text.toString() 30 intentSub.putExtra(MainActivity.EXTRA_MESSAGE, str) 31 32 editText.setText("") 33 } 34 35 setResult(Activity.RESULT_OK, intentSub) 36 finish() 37 } 38 39 } 40}

activity_sub.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:background="#fde" 5 android:orientation="vertical" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" > 8 9 <TextView 10 android:text="@string/sub" 11 android:textSize="24sp" 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content" 14 android:gravity="center_horizontal" 15 android:layout_marginTop="40dp" /> 16 17 <LinearLayout 18 android:layout_width="match_parent" 19 android:layout_height="wrap_content" 20 android:orientation="vertical"> 21 22 <TextView 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 android:layout_margin="20dp" 26 android:text="@string/from_main" 27 android:textSize="24sp" /> 28 29 <TextView 30 android:id="@+id/textView" 31 android:layout_width="220dp" 32 android:layout_height="wrap_content" 33 android:layout_margin="20dp" 34 android:textSize="24sp" /> 35 36 <TextView 37 android:layout_width="wrap_content" 38 android:layout_height="wrap_content" 39 android:layout_margin="20dp" 40 android:text="@string/os_name" 41 android:textSize="24sp" /> 42 43 <TextView 44 android:id="@+id/spinner" 45 android:layout_width="220dp" 46 android:layout_height="wrap_content" 47 android:layout_margin="20dp" 48 android:textSize="24sp" /> 49 50 51 </LinearLayout> 52 53 <LinearLayout 54 android:layout_width="match_parent" 55 android:layout_height="wrap_content" 56 android:orientation="horizontal"> 57 58 <TextView 59 android:layout_width="wrap_content" 60 android:layout_height="wrap_content" 61 android:layout_margin="20dp" 62 android:text="@string/to_main" 63 android:textSize="24sp" /> 64 65 <EditText 66 android:id="@+id/editText" 67 android:layout_width="220dp" 68 android:layout_height="wrap_content" 69 android:layout_margin="20dp" 70 android:background="#fff" 71 android:hint="@string/hint2" 72 android:textSize="24sp" /> 73 74 </LinearLayout> 75 76 <Button 77 android:id="@+id/button" 78 android:text="@string/back" 79 android:textSize="24sp" 80 android:layout_width="match_parent" 81 android:layout_height="wrap_content" 82 android:gravity="center_horizontal" 83 android:layout_margin="20dp" /> 84 85</LinearLayout>

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

Android Studio 3.5.3

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

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

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

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

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

hoshi-takanori

2020/02/12 21:56

ボタンが押されたときに editText から取得した値を intent に putExtra してますが、同様に spinner の値も取得して intent に putExtra すればいいと思います。
退会済みユーザー

退会済みユーザー

2020/02/13 08:46

editText から取得した値を intent に putExtra ということですが、具体的にどこの箇所か指定いただけると助かります。 activity_main.xmlの以下の箇所だということはわかっています。 ``` <EditText android:id="@+id/editText" android:layout_width="220dp" android:layout_height="wrap_content" android:layout_margin="20dp" android:background="#fff" android:hint="@string/hint1" android:textSize="24sp" /> ```
hoshi-takanori

2020/02/13 08:54

「editText から取得した値」に関してはすでに intent に putExtra してらっしゃいますよ。 「spinner の値」も同様に処理してみては、という提案です。ちなみに xml ではありません。
guest

回答1

0

ベストアンサー

java

1 intent.putExtra(EXTRA_MESSAGE, str) 2 intent.putExtra(EXTRA_MESSAGE, spinner_result) 3}

str と spinner_result のそれぞれに対して intent.putExtra するのはいいのですが、キー(EXTRA_MESSAGE の部分)が同じだと先に設定した str の値が後から設定した spinner_result に上書きされてしまいます。
EXTRA_MESSAGE とは別に EXTRA_SPINNER_RESULT か何かを作ってそれを使いましょう。

java

1class MainActivity : AppCompatActivity() { 2 3 companion object { 4 const val EXTRA_MESSAGE = "com.example.kotlinactivitydatatrans.MESSAGE" 5 const val EXTRA_SPINNER_RESULT = "com.example.kotlinactivitydatatrans.SPINNER_RESULT" 6 } 7 8 // 省略 9 10 intent.putExtra(EXTRA_MESSAGE, str) 11 intent.putExtra(EXTRA_SPINNER_RESULT, spinner_result)

また、受け取る側も EXTRA_MESSAGE と EXTRA_SPINNER を使い分ける必要があります。

java

1 val message = intent.extras?.getString(MainActivity.EXTRA_MESSAGE)?:"" 2 val spinner_result = intent.extras?.getString(MainActivity. EXTRA_SPINNER_RESULT)?:""

投稿2020/02/14 21:34

hoshi-takanori

総合スコア7895

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

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

退会済みユーザー

退会済みユーザー

2020/02/15 06:41

ご回答いただきありがとうございます。 質問中の「ご回答を受けての修正とエラー」にて、修正後の状況を書かせていただきました。
hoshi-takanori

2020/02/15 07:44

//val spinner = findViewById<Spinner>(R.id.spinner) がコメントなのはなぜでしょう? 他にも editText や textView や button も抜けてますね…。
退会済みユーザー

退会済みユーザー

2020/02/15 08:10

コメントになっていたのと、textViewについては修正しました。 editTextは、spinnerの場合 //textView.text = itemで登録されたitemを次の画面に遷移させたい ので、ボタンの部分に明記したようにすればフォームに入力した文字列と共に遷移画面に移行されると考えて書きました。 //ボタンが押されたらデータをsubページに移動する button.setOnClickListener
hoshi-takanori

2020/02/15 20:23

ごめんなさい、import kotlinx.android.synthetic.main.activity_main.* してるので findViewById は不要でしたね。
退会済みユーザー

退会済みユーザー

2020/02/19 08:17

ご回答を受けての修正とエラーに明記しましたが、「 他にも editText や textView や button も抜けてますね…」というご指摘に対してどう修正すればいいのでしょうか。
hoshi-takanori

2020/02/19 09:12 編集

「findViewById は不要」というのは、spinner はコメントあるいは削除で構いませんし、editText や textView や button も不要でした。ごめんなさい。(spinner のコメントを外しても動くことは動くはずですが。) また、SubActivity は setContentView(R.layout.activity_sub) しているので、import kotlinx.android.synthetic.main.activity_main.* ではなく import kotlinx.android.synthetic.main.activity_sub.* とする必要があります。
退会済みユーザー

退会済みユーザー

2020/02/19 09:43

ご回答いただきましてありがとうございます。エラーは回避できましたが、実現したい「選択した項目のデータを遷移後の画面で表示させる」ことはできていません。 質問からのコメントが長くなってしまったので、再度別質問として投稿した方がいいでしょうか。
hoshi-takanori

2020/02/19 09:48

それはどちらでも構いませんが、プログラムの各行にどのような意味があって、何をどうすればどうなるのかということをもう少しご自分でお考えになった方がよろしいかと存じます。
退会済みユーザー

退会済みユーザー

2020/02/19 10:00

解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問