I am trying to configure Spinner for multi-selection. I successfully made this multi-selectable, but when the item is reinstalled, the view inside the spinner is not updated.
Problem
When an item is re-selected in Spinner , the getView() SpinnerAdapter my SpinnerAdapter is called, it SpinnerAdapter View that I want, but that View somehow not displayed. I went through everything in the debugger, and I cannot find the difference between when another item is selected or the same item is re-selected. I went through all the code in Spinner AbsSpinner and AdapterView , and I cannot find what could be the reason for this.
Example
The rotator is filled with 6 items: Choice 1-6. A counter is generated with all items that are not selected. Choices 1, 2, and 4 are selected . Inside the plug, βSelect 1, Select 2, Select 4β is displayed.

Choice 4 is not selected (reselect in relation to Spinner). Choice 4 is correctly removed from the list, but the view inside the counter is not updated. It still displays "Select 1, Select 2, Select 4" . After going through the debugger, getView () on my SpinnerAdapter receives a call and all that. For some reason, the view is not actually displayed.

Option 2 is not selected (this is not a "re-selection" on Spinner). Here, everything functions as expected. Updated list items and view inside Spinner.

Some code
Multipurpose Spinner
public class MultiSelectSpinner extends Spinner { private OnItemSelectedListener listener; public MultiSelectSpinner(Context context) { super( context ); } public MultiSelectSpinner(Context context, AttributeSet attrs) { super( context, attrs ); } public MultiSelectSpinner(Context context, AttributeSet attrs, int defStyle) { super( context, attrs, defStyle ); } @Override public void setSelection( int position ) { super.setSelection( position ); if ( listener != null ) { listener.onItemSelected( this, getSelectedView(), position, getAdapter().getItemId( position ) ); } } public void setOnItemSelectedEvenIfUnchangedListener( OnItemSelectedListener listener ) { this.listener = listener; } }
Spinner Adapter
Post important roles here. Leaving getters / setters etc.
public class FormChoiceSpinnerAdapter implements SpinnerAdapter, OnItemSelectedListener { private Choice[] choices; private String title; private final DataSetObservable dataSetObservable = new DataSetObservable(); public FormChoiceSpinnerAdapter(String[] choices, String title) { setChoices( new Choice[choices.length] ); for (int i = 0; i < choices.length; i++) { getChoices()[i] = new Choice( choices[i] ); } } @Override public View getView( int position, View convertView, ViewGroup parent ) { Context context = parent.getContext(); if ( convertView == null ) { convertView = LayoutInflater.from( context ).inflate( android.R.layout.simple_spinner_item, parent, false ); } String displayString = ""; for (int i = 0; i < getChoices().length; i++) { Choice choice = getChoices()[i]; if ( choice.isSelected() ) { displayString += choice.getLabel() + ", "; } } if ( displayString.length() > 0 ) { displayString = displayString.trim().substring( 0, displayString.length() - 2 ); } else { displayString = getTitle() + "..."; } ( (TextView) convertView ).setText( displayString ); return convertView; } @Override public View getDropDownView( int position, View convertView, ViewGroup parent ) { Context context = parent.getContext(); if ( convertView == null ) { convertView = LayoutInflater.from( context ).inflate( R.layout.simple_dropdown_item, parent, false ); } Choice choice = getChoices()[position]; TextView text = (TextView) convertView.findViewById( android.R.id.text1 ); text.setText( choice.getLabel() ); ImageView selectedImage = (ImageView) convertView.findViewById( R.id.image_selected ); int visibility = choice.isSelected() ? View.VISIBLE : View.GONE; selectedImage.setVisibility( visibility ); return convertView; } @Override public void onItemSelected( AdapterView<?> parent, View view, int position, long id ) { Choice choice = getChoices()[position]; choice.setSelected( !choice.isSelected() ); ImageView imageView = (ImageView) view.findViewById( R.id.image_selected ); if ( imageView != null ) { imageView.setVisibility( choice.isSelected() ? View.VISIBLE : View.GONE ); } } @Override public void onNothingSelected( AdapterView<?> parent ) {