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 = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, list) {
@Override
public View getView(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;
}
@Override
public int getCount() {
return super.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
public class SpinnerNoDefault extends Spinner {
public void initialize(List<String> items) {
initialize(items, android.R.layout.simple_spinner_item, android.R.layout.simple_spinner_dropdown_item);
}
public void initialize(List<String> items, @LayoutRes int mItemResId, @LayoutRes int dropdownResId) {
List<String> itemsWithEmpty = new ArrayList<>(items);
itemsWithEmpty.add("");
String[] choicesArray = itemsWithEmpty.toArray(new String[itemsWithEmpty.size()]);
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getContext(), mItemResId, choicesArray) {
@NonNull
@Override
public View getView(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;
}
@Override
public int getCount() {
// Don't display last item. It is used as hint.
return super.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:
abstract class SpinnerSelectAdapter<T>(
context: Context,
private val resource: Int,
@ColorRes private val unselectedColorResource: Int,
@ColorRes private val selectedColorResource: Int,
open var objects: List<T>
) :
ArrayAdapter<T>(context, resource, objects) {
var selectedPosition = -1
override fun getView(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
}
override fun getDropDownView(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
}
open fun setView(view: View, item: T) {
}
open fun setEmptyView(view: View){
}
override fun getItem(position: Int): T? {
return objects[position]
}
override fun getCount(): Int {
return objects.size
}
}
Then I created adapter for String Values inherited from SpinnerSelectAdapter
class SpinnerStringAdapter(
context: Context,
resource: Int,
@ColorRes unselectedColorResource: Int,
@ColorRes selectedColorResource: Int,
override var objects: List<String>
) :
SpinnerSelectAdapter<String>(
context,
resource,
unselectedColorResource,
selectedColorResource,
objects
) {
override fun setView(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 {
override fun onItemSelected(
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"