Android Spinner with different layouts for "drop down state" and "closed state"?
I was having problem too. Rather than overriding the class, I hava an easier way to do this.
But first you need to understand the difference between the resource id in the adapter constructor, and the other one in setDropDownViewResource(...)
. For example,
SimpleAdapter adapter =
new SimpleAdapter(ab.getThemedContext(), data, R.layout.actionbar_dropdown, new String[] { "EventID", "Icon" },
new int[] { R.id.event_id, R.id.icon });
adapter.setDropDownViewResource(R.layout.actionbar_list_item);
R.layout.actionbar_dropdown
is the style for spinner, and R.layout.actionbar_list_item
for every single list item.
I used SimpleAdapter here, since if I use ArrayAdapter, the xml can only be a single TextView.
R.layout.actionbar_list_item
contains a TextView whose id is event_id
and an ImageView whose id is icon
.
R.layout.actionbar_dropdown
is almost exactly the same as actionbar_list_item
, but the visibility of ImageView of the latter is set to GONE.
In this way every list item has a textview and an imageview, but you will only see a textview on the spinner.
You have to create a custom Adapter
class for the Spinner and overwrite the two methods getView()
for the normal closed view and getDropDownView()
for the drop down list view. Both methods must return a View
object for a single element.
Have a look at this tutorial it might help you getting started.