Kotlin для Android: OnItemSelected Прослушиватель - PullRequest
0 голосов
/ 14 июня 2019

Я занимаюсь разработкой Android-проекта с Kotlin

Я бы хотел получить позицию значений из прослушивателя счетчика.

Я пытаюсь поместить глобальную переменную и изменить ее, но она изменяется только в слушателе, но возвращает начальное значение x

var x:Int?=null

class sem1gpaactivity : AppCompatActivity(){

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.sem1gpa)
    val firstterm01 = arrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8)
    val spinner = findViewById<View>(R.id.spinnerfirsttermh1) as Spinner
    val spinnerArrayAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, firstterm01)
    // The drop down view
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) 
    spinner.adapter = spinnerArrayAdapter

    spinner.spinnerfirsttermh1!!.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
    override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
      x = p2
      }
        override fun onNothingSelected(p0: AdapterView<*>?) {}
   }

    gpa1.text= x.toString()

}}

1 Ответ

0 голосов
/ 14 июня 2019

Это очень легко, и вы делаете свою вещь сложной.Если вы хотите, чтобы выбранный элемент позиции из Spinner.Сделай это так.

Это 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"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    <Spinner
            android:layout_width="395dp"
            android:layout_height="wrap_content" android:layout_marginTop="16dp"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
            android:layout_marginLeft="16dp" android:layout_marginStart="16dp" android:id="@+id/spinner"/>
</RelativeLayout>

А потом в вашем коде.

class MainActivity : AppCompatActivity() {
    var x: Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val spinnerItems = arrayOf("Item1", "Item2", "Item3", "Item4", "Item5", "Item6")
        spinner.adapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerItems)
        spinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener{
            override fun onNothingSelected(parent: AdapterView<*>?) {
            }
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                x = position
                Toast.makeText(applicationContext, position.toString(), Toast.LENGTH_SHORT).show()
            }
        }
    }
}

Параметр position расскажет вам о позиции.И вам не нужно использовать findViewById() при работе с Kotlin.Так что код прост и лаконичен.

Позиция начинается с 0, поэтому вам может потребоваться добавить 1 в переменную позиции (в зависимости от ваших потребностей).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...