Show default value in Spinner in android

后端 未结 4 736
北海茫月
北海茫月 2020-12-05 17:25

I want to show a dropdown for gender selection. I passed a string array as

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

but the problem

相关标签:
4条回答
  • 2020-12-05 17:45
    Spinner sp = (Spinner)findViewById(R.id.spinner); 
    sp.setSelection(pos);
    

    here pos is integer (your array item position)

    array is like below then pos = 0;

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

    then 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
            }
    
        }
    
    0 讨论(0)
  • 2020-12-05 17:47

    Spinner don't support Hint, i recommend you to make a custom spinner adapter.

    check this link : https://stackoverflow.com/a/13878692/1725748

    0 讨论(0)
  • Try below:

       <Spinner
        android:id="@+id/YourSpinnerId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:prompt="Gender" />
    
    0 讨论(0)
  • 2020-12-05 18:01

    I found a solution by extending ArrayAdapter and Overriding the getView method.

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

    What Android does when initialising the Spinner, is calling getView for the selected item before calling getView for all items in T[] objects. The SpinnerAdapterWithInitialText returns a TextView with the initialText, the first time it is called. All the other times it calls super.getView which is the getView method of ArrayAdapter which is called if you are using the Spinner normally.

    To find out whether the user has selected a spinner item, or if the spinner still displays the initialText, call selectionMade and hand over the spinner the adapter is assigned to.

    0 讨论(0)
提交回复
热议问题