前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー