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"