2015-10-27 2 views
1

Я хочу использовать разностные макеты для выпадающего списка: один для обычного вида (текст + изображение) и другой для раскрывающегося списка (только текст) ,Странное поведение с использованием пользовательского ArrayAdapter для Spinner Dropdown (дублирование элементов после нажатия) (Android)

Итак, сначала я попробовал следующее:

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item_title, R.id.text, list); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(adapter); 

Propably, потому что первый имеет изображение, а второй просто TextView, я не мог использовать это (всегда сгенерирует исключение - NullPointerException)

Итак, для этого я создал пользовательский ArrayAdapter, и он отлично работал с макетами, но возникла другая проблема: когда я выбираю элемент, этот элемент исчезает из выпадающего списка, а другой элемент занимает его место.

Например, это начальное состояние:

|item 1| 

item 1 
item 2 
item 3 
item 4 

Затем я хочу выбрать пункт 4 (после выбора, раскрывающийся список скрыть):

|item 4| 

И когда я нажимаю еще раз, чтобы выбрать другой элемент, он выглядит следующим образом:

|item 4| 

item 1 
item 2 
item 3 
item 1 

Кто-нибудь знает решение? Я хочу, чтобы все элементы всегда отображались в выпадающем списке (без дубликатов)!

+0

Не могли бы вы показать свой класс адаптера? –

ответ

0

я имел эту проблему с помощью пользовательского адаптера, в моем случае решение было заменить это:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = inflator.inflate(R.layout.spinner_item, null); 

     ViewHolder holder= new ViewHolder(); 
     holder.textTitle = (TextView) convertView.findViewById(R.id.textSpinnerItem); 
     holder.textTitle.setText(spinnerItems.get(position).getName()); 
     holder.image = (ImageView) convertView.findViewById(R.id.imageSpinnerItem); 
    } 


    return convertView; 
} 

с этим: (кажется, в некоторых случаях, при нажатии кнопки в раскрывающемся списке пункт convertView равно нуль)

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = inflator.inflate(R.layout.spinner_item, null); 
    } 
    ViewHolder holder= new ViewHolder(); 
    holder.textTitle = (TextView) convertView.findViewById(R.id.textSpinnerItem); 
    holder.textTitle.setText(spinnerItems.get(position).getName()); 
    holder.image = (ImageView) convertView.findViewById(R.id.imageSpinnerItem); 

    return convertView; 
} 

Надеется, что это помогает