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

Я разрабатываю проект Android с Kotlin

Я хотел бы получить значения x и y вне слушателя и вывести значение умножения на textview gpa1, но они не изменились

class sem1gpaactivity : AppCompatActivity(){
var x:Int=0
var y:Double=0.0
var z:Double=0.0

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)

spinnerArrayAdapter.setDropDownViewResource
  (android.R.layout.simple_spinner_dropdown_item) // The drop down view
spinner.adapter = spinnerArrayAdapter
spinner.spinnerfirsttermh1!!.onItemSelectedListener = object : 
AdapterView.OnItemSelectedListener {
   override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: 
Long) {

      when (p2){

          0->  x=0
          1->  x=1
          2->  x=2
          3->  x=3
          4->  x=4
          5->  x=5
          6->  x=6
          7->  x=7
          8->  x=8

      }

   }

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

val firstterm02 = arrayOf("A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "F")
val spinner1 = findViewById<View>(R.id.spinnerfirsttermh11) as Spinner
val spinnerArrayAdapter1 = ArrayAdapter(this, android.R.layout.simple_spinner_item, firstterm02)
spinnerArrayAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) // The drop down view
spinner1.adapter = spinnerArrayAdapter1
spinner1.spinnerfirsttermh11!!.onItemSelectedListener = object : 
AdapterView.OnItemSelectedListener {
    override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, 
p3: Long) {
        val spinnerLanguage2 = spinner1.getSelectedItem().toString()
        when (p2){
            0->  y=4.0
            1->  y=3.7
            2->  y=3.3
            3->  y=3.0
            4->  y=2.7
            5->  y=2.3
            6->  y=2.0
            7->  y=1.7
            8->  y=1.3
            9->  y=1.0
            10-> y=0.0
        }
                          }
    override fun onNothingSelected(p0: AdapterView<*>?) {}
}
z=x*y
gpa1.text = z.toString()
}}

z приводит к нулю, потому что x и y не изменены, и текстовое представление показывает 000, я пытался поместить текстовый код в забавный в слушателе первого счетчика и показать только x, это работает, но когда я помещаю текстовый код вне слушателя, это ничего не показывает

1 Ответ

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

текст не изменится так, потому что приложение извиняет метод oncreate только один раз, когда действие было создано впервые, если вы не уничтожите действие и не создадите его снова, так что вы можете сделать это, изменив текст gpa1 внутри слушателя обоих спиннеров, вот так:

в первом слушателе

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

            when (p2){

                0->  x=0
                1->  x=1
                2->  x=2
                3->  x=3
                4->  x=4
                5->  x=5
                6->  x=6
                7->  x=7
                8->  x=8

            }
            z=x*y
            tv.text = z.toString()

        }

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

во втором слушателе блесны

spinner1.spinnerfirsttermh11!!.onItemSelectedListener = object :
        AdapterView.OnItemSelectedListener {
        override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int,
                                    p3: Long) {
            val spinnerLanguage2 = spinner1.getSelectedItem().toString()
            when (p2){
                0->  y=4.0
                1->  y=3.7
                2->  y=3.3
                3->  y=3.0
                4->  y=2.7
                5->  y=2.3
                6->  y=2.0
                7->  y=1.7
                8->  y=1.3
                9->  y=1.0
                10-> y=0.0
            }
            z=x*y
            tv.text = z.toString()
        }
        override fun onNothingSelected(p0: AdapterView<*>?) {}
    }
...