webentwicklung-frage-antwort-db.com.de

Zeige Standardwert in Spinner in android

Ich möchte eine Dropdown-Liste für die Geschlechtsauswahl anzeigen. Ich habe ein String-Array als übergeben

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

das Problem ist jedoch, dass die Standardauswahl mit dem Wert "male" angezeigt wird und ich "Gender" als Standardwert anzeigen möchte. Übergebe ich "Geschlecht" in Array an Position 0, dann ist es auch in Dropdown sichtbar. Ich möchte nur "Geschlecht" als Hinweis, aber es muss nicht in Dropdown angezeigt werden.

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

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

hier ist pos eine Ganzzahl (die Position Ihres Array-Elements)

array ist wie unten 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
        }

    }
58
Dhaval Parmar

Ich habe eine Lösung gefunden, indem ich ArrayAdapter erweitert und die getView -Methode überschrieben habe.

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 beim Initialisieren des Spinners bewirkt, ist, dass getView für das ausgewählte Element aufgerufen wird, bevor getView für alle Elemente in T[] objects Aufgerufen wird. Das SpinnerAdapterWithInitialText gibt ein TextView mit dem initialText beim ersten Aufruf. Bei allen anderen Aufrufen von super.getView handelt es sich um die getView -Methode von ArrayAdapter wird aufgerufen, wenn Sie den Spinner normal verwenden.

Um herauszufinden, ob der Benutzer ein Spinner-Objekt ausgewählt hat oder ob der Spinner immer noch das initialText anzeigt, rufen Sie selectionMade an und übergeben Sie den Spinner, dem der Adapter zugewiesen ist.

2
pfaehlfd

Spinner unterstützen keinen Hinweis, ich empfehle Ihnen, einen benutzerdefinierten Spinner-Adapter zu erstellen.

überprüfen Sie diesen Link: https://stackoverflow.com/a/13878692/1725748

0
OWZY