web-dev-qa-db-fra.com

Spinner n'affiche pas la valeur sélectionnée

J'ai implémenté spinner en remplissant la liste de tableaux par le biais de la base de données. Je peux obtenir et afficher la liste de tableaux dans mon adaptateur de tableau spinner, mais si je sélectionne l'élément dans spinner, il ne s'affiche pas dans spinner?

Voici mon code,

 Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
     ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,Android.R.layout.simple_spinner_item, providerlist);

  adapter1.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);

J'obtiens la chaîne d'élément sélectionnée en utilisant ceci,

Spinner provid = (Spinner)findViewById(R.id.prospin);
String provider =provid.getSelectedItem().toString();

Quelqu'un peut-il m'aider à pls !!!

23
Jolly

Cette réponse est peut-être un peu stupide, mais essayez. Cela a fonctionné pour moi. 

  1. Vérifiez la couleur de fond de votre spinner!
  2. Et si c'est blanc le changer
  3. Profitez-en!
39
Catluc

J'ai eu le même problème et résolu en ajoutant notifyDataSetChanged() après la liaison des données dans Spinner.

Tout d'abord, j'ai l'adaptateur de liaison avec Blank ArrayList, puis une liste d'éléments du serveur est ajoutée à cette liste, mais j'ai oublié de notifyDataSetChanged() après la mise à jour de la liste.

ajoutez simplement adapter.notifyDataSetChanged(); après la mise à jour de la liste.

J'espère que ça vous sera utile.

12
Pratik Butani

Problème:

Spinner n'affiche ni la valeur par défaut ni la valeur de l'élément sélectionné. Mais les éléments du menu déroulant sont affichés lorsqu'ils sont sélectionnés.

Cause:

La couleur du fond et du texte étant blanche !!!

Solutions:

xml (préférable):

Rédigez une mise en page personnalisée pour un élément essentiel et utilisez-la à la place de la valeur par défaut, Android.R.layout.simple_spinner_item.

Comment changer la taille du texte et sa couleur?

Code (moins fiable):

your_spinner_instance.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
                               long id) {
        ((TextView) view).setTextColor(Color.RED);
    }
    public void onNothingSelected(AdapterView<?> parent) {
    }

});

Android a besoin d'une mise à jour majeure ou peut-être que Dart et Flutter devraient prendre le relais ... 

Merci Catluc

10
TastyCatFood

Utilisez wrap_content pour la hauteur de Spinner

Il n’a probablement pas assez de hauteur pour afficher du texte. 

3
Mladen Rakonjac

si vous avez un adaptateur personnalisé, vous devez changer la couleur du texte TextView

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView view = (TextView) super.getView(position, convertView, parent);
    view.setTextColor(Color.parseColor("#000000"));
    return view;
}

et si vous n'avez pas d'adaptateur personnalisé, vous devriez simplement changer l'arrière-plan de Spinner

3
Ali Salesi

Cela arrive aussi si le contexte n’est pas correctement défini. J'utilisais getApplicationContext() où il a besoin de getBaseContext().

2
Vyshak Athreya

Essaye ça.

 final ArrayList<String> providerlist= new ArrayList<String>();
    Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
    ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,Android.R.layout.simple_spinner_item, providerlist);

    adapter1.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
    spinner1.setAdapter(adapter1);
    spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                            // On selecting a spinner item
            String item = providerlist.get(position);

            // Showing selected spinner item
            Toast.makeText(this,
                    "Selected Country : " + item, Toast.LENGTH_LONG).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
1
Quang Doan

En général, les spinners sont sélectionnés par défaut lorsqu'ils sont utilisés. Essayez donc de définir les blancs ou toute autre donnée sur la première position correspondant à la position zéro, vous obtiendrez la position exacte de l'élément sélectionné. 

0
user6584366

Cette réponse est peut-être un peu stupide, mais si vous faites la même erreur, essayez d'abord de définir vos valeurs sur votre ArrayList, puis d'affecter celui-ci à spinner . et ensuite ajouter des valeurs d'une autre méthode ... à ce moment-là, j'ai rencontré le même problème. Sinon, vous pouvez envoyer notifyDataSetChanged () à votre tableauListe. 

0
Apeksha Gunjal

utilisez l'attribut Android:spinnerMode="dropdown" dans l'élément xml de votre élément Spinner déclaré

0

Vérifiez ces liens:

  1. http://www.technotalkative.com/Android-spinner-example/
  2. http://www.mkyong.com/Android/android-spinner-drop-down-list-example/

Sinon, essayez de le stocker en sélectionnant l'article:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> adapter, View v,
                    int position, long id) {
                // On selecting a spinner item
                String item = adapter.getItemAtPosition(position).toString();

                // Showing selected spinner item
                Toast.makeText(getApplicationContext(),
                        "Selected Country : " + item, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
0
Chintan Soni

essayez ce code ==> 

ArrayAdapter<String> stateNameAdaptor = new ArrayAdapter<String>(this,Android.R.layout.simple_list_item_1, stateNameList);  
     stateNameAdaptor.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);

spnState.setAdapter(stateNameAdaptor);
0
Abhijit Rajmane

Wierd. J'ai eu le même problème. Ce que j'ai fait pour que cela fonctionne: 1. Ajoutez quelques données initiales à la liste (par exemple, sélectionnez - -). Chargez le reste des données et ajoutez-les à la liste 3. Appelez adapter.notifyDatasetChaged ()

0
kylexy1357

Le problème de ce que j’ai trouvé était avec la feuille de style. 

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <!-- Customize your theme here. -->
  <item name="windowNoTitle">false</item>
  <item name="windowActionBar">true</item>
  <item name="colorPrimary">@color/colorPrimary</item>
  <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  <item name="colorAccent">@color/colorAccent</item>
</style> 

Pour la mise en page XML, utilisez ceci

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:fitsSystemWindows="true"
    Android:paddingBottom="5dp"
    style="@style/AppTheme">

    <LinearLayout
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:paddingTop="5dp"
        Android:paddingLeft="24dp"
        Android:paddingRight="24dp">

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Spinner"
            Android:layout_marginTop="10dp"
            Android:textColor="@color/colorBlack"/>

        <Spinner
            Android:id="@+id/Spinner"
            Android:layout_width="fill_parent"
            Android:layout_height="50dp"
            Android:backgroundTint="@color/colorPrimary"
            Android:textColorHint="#05ab9a"
            Android:padding="15dp"
            style="@style/Base.Widget.AppCompat.Spinner.Underlined"
            tools:targetApi="Lollipop" />
    </LinearLayout>
</ScrollView>

Et enfin pour la classe 

String [] NUMBERS= {"3 ","6 ","13 "};

Spinner s_spinner = (Spinner) findViewById(R.id.Spinner);

ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(this,
                    Android.R.layout.simple_dropdown_item_1line, NUMBERS);

// Specify the layout to use when the list of choices appears 
           spinnerAdapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);

// attaching data adapter to spinner
s_spinner.setAdapter(spinnerAdapter );
0
RodneyO

Pour moi, le problème est que j'utilise getApplicationContext(). Quand je change pour this cela fonctionne bien.

ArrayAdapter<*> adapter = new ArrayAdapter<>(this, Android.R.layout.simple_spinner_item, documentsCategories);
0
Puni

Vous devriez utiliser le premier Spinner pour obtenir les valeurs.

Essayez le code suivant:

String provider = spinner1.getSelectedItem().toString();

Ce que vous faites, c'est obtenir la valeur par défaut du compteur.