2013-06-12 5 views
27

Ich möchte ein Dropdown für die Geschlechterauswahl zeigen. Ich führte einen String-Array alsZeige Standard-Wert in Spinner in Android

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

aber das Problem ist, dass zeigt Standardauswahl mit dem Wert von "male" ist und ich mag "Gender" als Standardwert zeigen. Wenn ich "Gender" in Array an Position 0 übergebe, dann ist es auch in Dropdown sichtbar. Ich möchte nur "Geschlecht" als Hinweis, aber es muss nicht im Dropdown angezeigt werden.

Kann mir jemand sagen, wie ich das machen kann. Danke im Voraus.

+3

[Sehen Sie sich diese gleiche Frage hier gefragt wird] [1] [1]: http://stackoverflow.com/questions/867518/how-to-make-an-android -spinner-with-initial-text-select-one – Nargis

+0

Könnten Sie bitte einen Screenshot Ihres gewünschten Designs machen? Danke – Jarvis

Antwort

-8

Sie auf die Spinner Aufforderung einstellen ... das kann in der XML mit Android eingestellt werden: prompt = "Gender"

+5

Ich bekomme die Eingabeaufforderung als Titel des Optionsfensters, und die gewählte Option bleibt gleich –

+6

Das ist falsch, weil prompt die Überschrift des Popup-Fensters ist. – pioneerBhawna

+7

funktioniert nicht für den Spinner – youssefhassan

44
Spinner sp = (Spinner)findViewById(R.id.spinner); 
sp.setSelection(pos); 

hier pos (Artikel Position Array) integer ist

Array ist unten wie dann pos = 0;

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

dann in onItemSelected

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

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

    } 
+7

Lesen Sie die Frage noch einmal. – Tarun

+0

großartige Idee .. Sie lösten mein Problem .. +1 – Ranjit

-5

unten Versuchen:

<Spinner 
    android:id="@+id/YourSpinnerId" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:prompt="Gender" /> 
0

Ich fand eine Lösung durch Erweitern ArrayAdapter und Überschreiben der getView Methode.

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; 
     } 
    } 
} 

Was Android tut, wenn die Spinner Initialisierung wird getView für das ausgewählte Element Aufruf vor getView für alle Elemente in T[] objects aufrufen. Die SpinnerAdapterWithInitialText gibt eine TextView mit der initialText, das erste Mal, es heißt. Alle anderen Male ruft es super.getView das ist die getView Methode von ArrayAdapter, die aufgerufen wird, wenn Sie den Spinner normalerweise verwenden.

Um herauszufinden, ob der Benutzer ein Drehfeld ausgewählt hat, oder wenn das Drehfeld weiterhin initialText anzeigt, rufen Sie selectionMade auf und übergeben Sie das Drehfeld, dem der Adapter zugewiesen ist.