どのように私は、ユーザーが依存スピナーで選択したデータをAQUIREことができますか?

停止:

私は何をしたいです

私は、ユーザーが依存スピナー上で選択したデータを取得したいと思います。

私の現在のコードでは、それが最初のスピナーからデータを取得することに成功しましたが、私は2番目のスピナーからそれを行うことはできません。

問題

どのように私は、ユーザーの選択の適切なデータを取得するために自分のコードを修正する必要がありますか?

  1. この場合、第2 TextViewにはBMWでなければなりませんが、それは第二スピナの第一候補であるアウディ、です。

モーター

  1. 最初のTextViewは、ユーザーの選択に続いて変更されます。この場合には、モータからの移動に変化するが、再度、第二のTextViewは、第スピナーの最初の第一候補として残りました。

モバイル

現在のコード

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=26402&siteId=1