Skip to content Skip to sidebar Skip to footer

How To Set My First Value (default Value) In Spinner As Empty

How to set my first value (default value) in spinner as empty. Means, until the user selects value from list, spinner will have no value. I tried below list.add(''); But, it won

Solution 1:

i found out the way. Here is how we do it, let the last line be

list.add("");

and add below code :

ArrayAdapter<String> adapter = newArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, list) {

                        @OverridepublicViewgetView(int position, View convertView, ViewGroup parent) {

                                View v = super.getView(position, convertView, parent);
                                if (position == getCount()) {
                                    ((TextView)v.findViewById(android.R.id.text1)).setText("");
                                    ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed"
                                }

                                return v;
                            }       

                            @Overridepublic int getCount() {
                                returnsuper.getCount()-1;            // you don't display last item. It is used as hint.
                            }

                    };


                    adapter.setDropDownViewResource(R.layout.custom_spinner_list);
                    spinner.setAdapter(adapter);
                    spinner.setSelection(adapter.getCount());        //set the hint the default selection so it appears on launch.
                    spinner.setOnItemSelectedListener(this);
                    notifyDataSetChanged();        

Solution 2:

    List<String> allGoverNames = new ArrayList<String>();
    allGoverNames.add(0, "");
    allGoverNames.add(1,"Cricket");
    allGoverNames.add(2,"FootBall");
    allGoverNames.add(3,"Chess");


ArrayAdapter<String> GoverdataAdapter = new ArrayAdapter<String>
                            (context, android.R.layout.simple_spinner_item, allGoverNames);

                    GoverdataAdapter.setDropDownViewResource
                            (android.R.layout.simple_spinner_dropdown_item);

                    GovernorateSpinner.setAdapter(GoverdataAdapter);

Solution 3:

In SearchableSpinner (com.toptoche.searchablespinnerlibrary.SearchableSpinner) there is a parameter called "app:hintText" - you can use it for your purpose. For example:

<com.toptoche.searchablespinnerlibrary.SearchableSpinner
            android:id="@+id/vehicle_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/spinner_background"
            android:layout_marginStart="20dp"
            android:layout_marginEnd="20dp"
            android:layout_marginBottom="20dp"
            app:hintText=" "/>

Hint will dissapear once something will be chosen from the Spinner list.

Solution 4:

Thanks to user45678's answer above, I wrote this

publicclassSpinnerNoDefaultextendsSpinner {

publicvoidinitialize(List<String> items) {
    initialize(items, android.R.layout.simple_spinner_item, android.R.layout.simple_spinner_dropdown_item);
}

publicvoidinitialize(List<String> items, @LayoutRes int mItemResId, @LayoutRes int dropdownResId) {
    List<String> itemsWithEmpty = newArrayList<>(items);
    itemsWithEmpty.add("");

    String[] choicesArray = itemsWithEmpty.toArray(newString[itemsWithEmpty.size()]);
    ArrayAdapter<String> spinnerArrayAdapter = newArrayAdapter<String>(getContext(), mItemResId, choicesArray) {
        @NonNull@OverridepublicViewgetView(int position, View convertView, @NonNull ViewGroup parent) {
            View v = super.getView(position, convertView, parent);
            if (position == getCount()) {
                ((TextView)v.findViewById(android.R.id.text1)).setText(null);
                ((TextView)v.findViewById(android.R.id.text1)).setHint(parent.getContext().getString(R.string.spinner_no_default_hint));
            }

            return v;
        }

        @Overridepublic int getCount() {
            // Don't display last item. It is used as hint.returnsuper.getCount()-1;
        }
    };

    spinnerArrayAdapter.setDropDownViewResource(dropdownResId);
    setAdapter(spinnerArrayAdapter);
    setSelection(itemsWithEmpty.size()-1);
}
}

Solution 5:

At first. When you initialize your spinner add

spinner.setSelection(0, false)

And I created this adapter with selected item:

abstractclassSpinnerSelectAdapter<T>(
    context: Context,
    privateval resource: Int,
    @ColorResprivateval unselectedColorResource: Int,
    @ColorResprivateval selectedColorResource: Int,
    openvar objects: List<T>
) :
    ArrayAdapter<T>(context, resource, objects) {

    var selectedPosition = -1overridefungetView(position: Int, convertView: View?, parent: ViewGroup): View {
        val view = convertView ?: LayoutInflater.from(parent.context)
            .inflate(resource, parent, false)
        if(selectedPosition != -1) {
            setView(view, getItem(position)!!)
        }
        return view
    }

    overridefungetDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
        val view = convertView ?: LayoutInflater.from(parent.context)
            .inflate(resource, parent, false)
        if(selectedPosition == position){
            view.setBackgroundResource(selectedColorResource)
        }else {
            view.setBackgroundResource(unselectedColorResource)
        }
        setView(view, getItem(position)!!)
        return view
    }

    openfunsetView(view: View, item: T) {

    }

    openfunsetEmptyView(view: View){

    }


    overridefungetItem(position: Int): T? {
        return objects[position]
    }


    overridefungetCount(): Int {
        return objects.size
    }
}

Then I created adapter for String Values inherited from SpinnerSelectAdapter

classSpinnerStringAdapter(
    context: Context,
    resource: Int,
    @ColorRes unselectedColorResource: Int,
    @ColorRes selectedColorResource: Int,
    overridevar objects: List<String>
) :
    SpinnerSelectAdapter<String>(
        context,
        resource,
        unselectedColorResource,
        selectedColorResource,
        objects
    ) {


    overridefunsetView(view: View, item: String) {
        val txt = view.findViewById<TextView>(android.R.id.text1)
        txt.text = item
    }

}

And after in your fragment or activity

val adapter = SpinnerStringAdapter(
           requireContext(),
           R.layout.spinner_item,
           R.color.colorBG,
           R.color.colorSubBG,
           types
       )
       spinner.adapter = typeAdapter
       spinner.setSelection(0, false)
       spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
           overridefunonItemSelected(
               parent: AdapterView<*>?,
               view: View?,
               position: Int,
               id: Long
           ) {
               adapter.selectedPosition = position
               adapter.notifyDataSetChanged()
           }
``

Post a Comment for "How To Set My First Value (default Value) In Spinner As Empty"