Bonjour, après avoir effacer ce message 3 ou 4 fois parce que je pensais avoir trouvé la solution, je me décide à demander de l'aide. Je souhaite que les items du menu déroulant d'un spinner(n°2) dépendent de l'item sélectionné dans un précédent spinner(n°1). Débutant en Kotlin et n'étant pas passé par JAVA, je galère un peu...

Mes deux spinners fonctionnent très bien, mis à part ce problème là.

Dans le onItemSelected du spinner n°1, j'ai mis un when (qui fonctionne puisque j'ai testé les différentes valeurs avec un toast) qui, en fonction de l'itm du spinner n°1, détermine les valeurs que doit prendre la variable "arraySpinner2 : Array<String>" qui vient en paramètre de l'ArrayAdapter de mon spinner n°2 (aa = ArrayAdapter(this, android.R.layout.simple_spinner_item, arraySpinner2).


Au départ, plantage, la variable n'était pas déclarée (plantage seulement pour la partie du when, alors que pour l'ArrayAdapter du spinner n°2 c'était bon).
Corrigé en la déclarant en lateinit var au début de ma classe.

Mais maintenant plantage parce que la variable lateinit n'est pas initialisée.
Détourné en donnant une valeur de base à ma variable, mais du coup, c'est cette valeur qui reste tout le temps, quelque soit la séléction du spinner n°1 (et donc l'orientation de mon when).

Je pensais avoir résolu mon problème en ajoutant à la suite du when un "adapter(du spinner n°2).notifyDataSetChanged", mais non...

Je sèche! Je ne sais pas si j'ai été clair...

Comme ce n'est peut-être pas très clair, je met le code ci dessous (dans le code, j'ai retiré la valeur par défaut de mon spinner n°2 (donc lateinit var non initialisée).

Merci d'avance pour votre aide

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.example.prv
 
import Utils.showToast
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.Toast
import androidx.appcompat.widget.Toolbar
 
class CreateEtudeActivity : AppCompatActivity() {
 
    lateinit var arrayType1 : Array<String>
    lateinit var arrayType2 : Array<String>
    lateinit var arrayType2Adapter : ArrayAdapter<String>
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
 
        setContentView(R.layout.create_etude_layout)
 
//Mise en place du spinnerType1
        arrayType1 = arrayOf("Batimentaire", "Manifestation", "DECI")
        val spinnerType1: Spinner? = FindViewById<Spinner>(R.id.spinner_type1_create_etude_layout) 
        val arrayType1Adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, arrayType1) 
 
arrayType1Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) 
 
        spinnerType1?.adapter = arrayType1Adapter 
 
        spinnerType1?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
 
            override fun onItemSelected(parent: AdapterView<*>?,view: View?,position: Int,id: Long) {
                var type1 : String = spinnerType1?.selectedItem.toString()
 
                when (spinnerType1?.selectedItem) {
                    "Batimentaire" -> arrayType2 = arrayOf("Résidence", "ICPE", "ERP")
                    "Manifestation" -> arrayType2 = arrayOf("Manif 1", "Manif 2", "Manif 3")
                    "DECI" -> arrayType2 = arrayOf("DECI 1", "DECI 2", "DECI 3")
                }
                arrayType2Adapter.notifyDataSetChanged()
            }
 
            override fun onNothingSelected(parent: AdapterView<*>?) {
                showToast(context = this@CreateEtudeActivity, message = "Aucune séléction")
            }
        }
 
//Mise en place du spinnerType2
        val spinnerType2: Spinner? = findViewById<Spinner>(R.id.spinner_type2_create_etude_layout) 
        arrayType2Adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, arrayType2) arrayType2Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)        spinnerType2?.adapter = arrayType2Adapter 
 
 
        spinnerType2?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
 
            override fun onItemSelected(parent: AdapterView<*>?,view: View?,position: Int,id: Long) {
                Toast.makeText(this@CreateEtudeActivity, spinnerType2?.selectedItem.toString() + " a été sélectionné", Toast.LENGTH_SHORT).show()
            }
 
            override fun onNothingSelected(parent: AdapterView<*>?) {
                showToast(context = this@CreateEtudeActivity, message = "Aucune séléction")
            }
        }
 
// Mise en place de la toolbar
        val toolbarCreateEtudeActivity = findViewById<Toolbar>(R.id.toolbar_create_etude_activity)
         setSupportActionBar(toolbarCreateEtudeActivity)
         supportActionBar?.title = "Nouvelle étude"
    }
 
}