Afficher la valeur par défaut dans Spinner dans android

Je veux afficher une liste déroulante pour la sélection du genre. J'ai passé un tableau de chaînes comme

String arr[]=new String[]{"male","female"};

, Mais le problème est que des spectacles de sélection par défaut avec la valeur de "male" et je veux montrer "Gender" comme valeur par défaut. Si je passe "Gender" dans le tableau à la position 0, alors il est visible dans la liste déroulante aussi. Je veux juste "genre" comme indice mais il ne doit pas être affiché dans la liste déroulante.

Quelqu'un peut-il me dire comment je peux faire ça? Merci à l'avance.

32
demandé sur Laksh 2013-06-12 14:50:42

5 réponses

Vous pouvez définir l'invite sur le spinner ... cela peut être défini dans le xml avec android: prompt= "Gender"

-11
répondu Harsh 2013-06-12 12:14:25
Spinner sp = (Spinner)findViewById(R.id.spinner); 
sp.setSelection(pos);

Ici pos est entier (position de votre élément de tableau)

Tableau est comme ci-dessous puis pos = 0;

String str[] = new String{"Select Gender","male", "female" };

Puis dans onItemSelected

@Override
    public void onItemSelected(AdapterView<?> main, View view, int position,
            long Id) {

        if(position > 0){
          // get spinner value
        }else{
          // show toast select gender
        }

    }
51
répondu Dhawal Sodha Parmar 2015-12-26 14:01:52

Spinner ne supporte pas L'indice, je vous recommande de faire un adaptateur de spinner personnalisé.

Vérifier ce lien : https://stackoverflow.com/a/13878692/1725748

1
répondu OWZY 2017-05-23 12:18:10

J'ai trouvé une solution en étendant ArrayAdapter et en remplaçant la méthode getView.

import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

/**
 * A SpinnerAdapter which does not show the value of the initial selection initially,
 * but an initialText.
 * To use the spinner with initial selection instead call notifyDataSetChanged().
 */
public class SpinnerAdapterWithInitialText<T> extends ArrayAdapter<T> {

    private Context context;
    private int resource;

    private boolean initialTextWasShown = false;
    private String initialText = "Please select";

    /**
     * Constructor
     *
     * @param context The current context.
     * @param resource The resource ID for a layout file containing a TextView to use when
     *                 instantiating views.
     * @param objects The objects to represent in the ListView.
     */
    public SpinnerAdapterWithInitialText(@NonNull Context context, int resource, @NonNull T[] objects) {
        super(context, resource, objects);
        this.context = context;
        this.resource = resource;
    }

    /**
     * Returns whether the user has selected a spinner item, or if still the initial text is shown.
     * @param spinner The spinner the SpinnerAdapterWithInitialText is assigned to.
     * @return true if the user has selected a spinner item, false if not.
     */
    public boolean selectionMade(Spinner spinner) {
        return !((TextView)spinner.getSelectedView()).getText().toString().equals(initialText);
    }

    /**
     * Returns a TextView with the initialText the first time getView is called.
     * So the Spinner has an initialText which does not represent the selected item.
     * To use the spinner with initial selection instead call notifyDataSetChanged(),
     * after assigning the SpinnerAdapterWithInitialText.
     */
    @Override
    public View getView(int position, View recycle, ViewGroup container) {
        if(initialTextWasShown) {
            return super.getView(position, recycle, container);
        } else {
            initialTextWasShown = true;
            LayoutInflater inflater = LayoutInflater.from(context);
            final View view = inflater.inflate(resource, container, false);

            ((TextView) view).setText(initialText);

            return view;
        }
    }
}

Ce Qu'Android fait lors de l'initialisation du Spinner, c'est appeler getView pour l'élément sélectionné avant d'appeler getView pour tous les éléments de T[] objects. Le SpinnerAdapterWithInitialText renvoie un TextView avec le initialText, la première fois qu'il est appelé. Toutes les autres fois, il appelle super.getView qui est la méthode getView de {[1] } qui est appelée si vous utilisez le Spinner normalement.

Pour savoir si l'utilisateur a sélectionné un spinner ou si le fileur affiche toujours le initialText, appelez selectionMade et remettez le fileur auquel l'adaptateur est affecté.

0
répondu pfaehlfd 2018-02-09 10:00:35

Essayez ci-dessous:

   <Spinner
    android:id="@+id/YourSpinnerId"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="Gender" />
-5
répondu Riser 2013-06-12 11:12:27