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.
5 réponses
Vous pouvez définir l'invite sur le spinner ... cela peut être défini dans le xml avec android: prompt= "Gender"
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
}
}
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
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é.
Essayez ci-dessous:
<Spinner
android:id="@+id/YourSpinnerId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="Gender" />