사용자가 의존 회에서 선택한 것을 어떻게 데이터를 aquire 수 있습니까?

중단 :

내가하고 싶으면 무엇

나는 사용자가 의존 스피너에서 선택하는 데이터를 취득하고 싶습니다.

내 현재 코드에, 그것은 첫 회에서 데이터를 획득하는 데 성공했지만, 난 두 번째 회에서 그것을 할 수 없습니다.

문제

어떻게 사용자의 선택의 적절한 데이터를 수집하려면 코드를 수정해야합니까?

  1. 이 경우, 두 번째 텍스트 뷰는 BMW해야하지만 두 번째 회 전자의 첫 번째 후보 아우디입니다.

모터

  1. 첫 번째 텍스트 뷰는 사용자의 선택 다음 변경됩니다. 이 경우, 모터의 이동을 변경되었지만, 다시 제 텍스트 뷰는 제 스피너의 제 첫번째 후보로 유지 하였다.

변하기 쉬운

현재 코드

MainActivity.kt

package com.example.spinner

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.app.Activity
import android.content.Intent
import android.util.Log
import android.view.View
import android.widget.AdapterView
import android.widget.Spinner
import android.widget.ArrayAdapter
import kotlinx.android.synthetic.main.activity_main.*
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.Toast

class MainActivity : AppCompatActivity(), AdapterView.OnItemSelectedListener {

    var spinner1: Spinner? = null
    var spinner2: Spinner? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        spinner1 = findViewById(R.id.spinner1) as Spinner
        spinner2 = findViewById(R.id.spinner2) as Spinner
        val adapter1 = ArrayAdapter.createFromResource(
            this,
            R.array.array1, android.R.layout.simple_spinner_item
        )
        spinner1?.setAdapter(adapter1)
        spinner1?.setOnItemSelectedListener(this)
    }
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the main; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        val id = item.getItemId()
        return if (id == R.id.action_settings) {
            true
        } else super.onOptionsItemSelected(item)
    }

    override fun onItemSelected(
        parent: AdapterView<*>, view: View, position: Int,
        id: Long
    ) {
        if (spinner1?.getSelectedItem() == "mobile") {
            Toast.makeText(
                applicationContext, "Mobil dipilih",
                Toast.LENGTH_SHORT
            ).show()

            val adapter2 = ArrayAdapter.createFromResource(
                this,
                R.array.mobile_array, android.R.layout.simple_spinner_item
            )
            spinner2?.setAdapter(adapter2)
            spinner2?.setOnItemSelectedListener(this)

        } else {
            val adapter2 = ArrayAdapter.createFromResource(
                this,
                R.array.motor_array, android.R.layout.simple_spinner_item
            )
            spinner2?.setAdapter(adapter2)
            spinner2?.setOnItemSelectedListener(this)

        }


        // here I try to put the selected contents to variables
        val spinner1_content = spinner1?.getSelectedItem() as String
        textView1.text = spinner1_content
        val spinner2_content = spinner2?.getSelectedItem() as String
        textView2.text = spinner2_content


    }


    override fun onNothingSelected(parent: AdapterView<*>?) {

    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.stackspinner.MainActivity" >

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/spinner1" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#00f"
        android:layout_marginTop="100dp"
        android:textSize="40sp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#00f"
        android:layout_marginTop="100dp"
        android:textSize="40sp" />

    </LinearLayout>

</RelativeLayout>

strings.xml의

<resources>

    <string name="app_name">Application Name</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>

    <string-array name="array1">
        <item>mobile</item>
        <item>motor</item>
    </string-array>
    <string-array name="mobile_array">
        <item>Android</item>
        <item>blackberry</item>
        <item>apple</item>
    </string-array>
    <string-array name="motor_array">
        <item>Audi</item>
        <item>BMW</item>
        <item>unicorn</item>
    </string-array>
</resources>

대답을 듣고 현재 코드

MainActivity.kt

package com.example.spinner

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.app.Activity
import android.content.Intent
import android.util.Log
import android.view.View
import android.widget.AdapterView
import android.widget.Spinner
import android.widget.ArrayAdapter
import kotlinx.android.synthetic.main.activity_main.*
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.Toast

class MainActivity : AppCompatActivity(), AdapterView.OnItemSelectedListener {

    var spinner1: Spinner? = null
    var spinner2: Spinner? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        spinner1 = findViewById(R.id.spinner1) as Spinner
        spinner2 = findViewById(R.id.spinner2) as Spinner
        val adapter1 = ArrayAdapter.createFromResource(
            this,
            R.array.array1, android.R.layout.simple_spinner_item
        )
        spinner1?.setAdapter(adapter1)
        spinner1?.setOnItemSelectedListener(this)

        val adapter2 = ArrayAdapter.createFromResource(
            this,
            R.array.array1, android.R.layout.simple_spinner_item
        )
        spinner2?.setAdapter(adapter2)
        spinner2?.setOnItemSelectedListener(this)
    }
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the main; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        val id = item.getItemId()
        return if (id == R.id.action_settings) {
            true
        } else super.onOptionsItemSelected(item)
    }

    override fun onItemSelected(
        parent: AdapterView<*>, view: View, position: Int,
        id: Long
    ) {
        if (spinner1?.getSelectedItem() == "mobile") {
            Toast.makeText(
                applicationContext, "Mobil dipilih",
                Toast.LENGTH_SHORT
            ).show()

            val adapter2 = ArrayAdapter.createFromResource(
                this,
                R.array.mobile_array, android.R.layout.simple_spinner_item
            )
            spinner2?.setAdapter(adapter2)

        } else {
            val adapter2 = ArrayAdapter.createFromResource(
                this,
                R.array.motor_array, android.R.layout.simple_spinner_item
            )
            spinner2?.setAdapter(adapter2)

        }


        // here I try to put the selected contents to variables
        val spinner1_content = spinner1?.getSelectedItem() as String
        textView1.text = spinner1_content
        val spinner2_content = spinner2?.getSelectedItem() as String
        textView2.text = spinner2_content


    }


    override fun onNothingSelected(parent: AdapterView<*>?) {

    }
}
로베르 :

때마다 모바일 (OA 모터)를 선택 당신이 당신의 spinner2를 다시 만드는 것이 기록해 둡니다. 각 회 전자에 대해 서로 다른 청취자를 사용해야합니다 :

spinner1.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(parent: AdapterView<*>?) {

            }

            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
              //your spinner1 listener code
            }

        }

spinner2.dothesame .....

더 나은 이해를 위해 전체에서 onCreate를 넣어 :

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    spinner1 = findViewById(R.id.spinner1) as Spinner
    spinner2 = findViewById(R.id.spinner2) as Spinner
    textView1 = findViewById(R.id.textView1) as TextView
    textView2 = findViewById(R.id.textView2) as TextView

    val adapter1 = ArrayAdapter.createFromResource(
            this,
            R.array.array1, android.R.layout.simple_spinner_item
    )
    spinner1?.setAdapter(adapter1)
    spinner1?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
        override fun onNothingSelected(parent: AdapterView<*>?) {

        }

        override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {


            var spinner2Adapter: ArrayAdapter<CharSequence>? = null
            //select the right adapter for de Spinner2
            if (spinner1?.getSelectedItem() == "mobile") {
                spinner2Adapter = ArrayAdapter.createFromResource(
                        applicationContext,
                        R.array.mobile_array, android.R.layout.simple_spinner_item
                )
            } else {
                spinner2Adapter = ArrayAdapter.createFromResource(
                        applicationContext,
                        R.array.motor_array, android.R.layout.simple_spinner_item
                )
            }
            //set the adapter and the listener for spinner2
            spinner2?.setAdapter(spinner2Adapter)
            spinner2?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
                override fun onNothingSelected(parent: AdapterView<*>?) {

                }

                override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                    val spinner2_content = spinner2?.getSelectedItem() as String
                    textView2?.text = spinner2_content

                }
            }


            // here I try to put the selected contents to variables
            val spinner1_content = spinner1?.getSelectedItem() as String
            textView1?.text = spinner1_content
        }

    }
}

추천

출처http://43.154.161.224:23101/article/api/json?id=26400&siteId=1