IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Kotlin Discussion :

Modification d'un ArrayAdapter pour un spinner


Sujet :

Kotlin

  1. #1
    Membre à l'essai
    Homme Profil pro
    Employé
    Inscrit en
    Mai 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Mai 2017
    Messages : 37
    Points : 23
    Points
    23
    Par défaut Modification d'un ArrayAdapter pour un spinner
    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"
        }
     
    }

  2. #2
    Membre à l'essai
    Homme Profil pro
    Employé
    Inscrit en
    Mai 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Mai 2017
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    Puisque personne n'a réussi à trouver une solution, je l'ai prise ailleurs et la partage pour que ça puisse peut-être servir à quelqu'un...

    Remplacer les arrayOf qui alimentent les menus déroulants par des mutableList, et dans le when, au lieu de remplacer carrément les variables, vider les mutableList (.clear) et les charger avec les nouvelles valeurs (arrayType2 = mutableListOf("choix1", "choix2",...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/08/2007, 21h31
  2. Modification d'une fonction pour selectionner une plage de cellule
    Par jackbauer972 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/08/2007, 16h07
  3. Réponses: 1
    Dernier message: 29/03/2007, 10h46
  4. Réponses: 3
    Dernier message: 11/06/2006, 03h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo