Различные представления для счетчика и элемента счетчика?

Есть ли способ установить другое представление для представления закрытого счетчика и представления элемента счетчика?

Я предполагаю, что идентификатор ресурса, используемый в ArrayAdapter , будет использоваться для закрытого представления элементов, а также для представлений элементов, поэтому я расширил ArrayAdapter и определил getView , который использует другой ресурс, но идентификатор ресурса в вызове суперконструктора, похоже, никогда не используется, используется только идентификатор ресурса, используемый в getView

​​В коде Spinner.java говорится:

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

но это кажется невозможным, учитывая код.

В любом случае - мой код:

public class CustomArrayAdapter  extends ArrayAdapter {

    int itemViewResourceId;
    private LayoutInflater inflater;
    ViewPopulator viewPopulator;
    private List objects;

    public CustomArrayAdapter(Context context, int textViewResourceId, int itemViewResourceId, ViewPopulator viewPopulator, List objects) {
        super(context, textViewResourceId, objects);
        inflater = LayoutInflater.from(context);
        this.viewPopulator = viewPopulator;
        this.itemViewResourceId = itemViewResourceId;
        this.objects = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null || convertView.getTag() == null) {
            // new view - populate 
            convertView = inflater.inflate(itemViewResourceId, parent, false);
            convertView.setTag(new Object());
        }
        viewPopulator.populateView(position, convertView, parent, objects.get(position));
        return convertView;
    }
}

public abstract class ViewPopulator {
    public abstract void populateView(int position, View convertView, ViewGroup parent, T item);
}

вызывается с помощью:

CustomArrayAdapter typeAdapter = new CustomArrayAdapter(context, R.layout.list_item, R.layout.list_item_big, new ViewPopulator() {
        @Override
        public void populateView(int position, View convertView, ViewGroup parent, T item) {
            ((TextView) convertView.findViewById(R.id.list_item)).setText(position + " - " + item.getName());
        }
    }, itemsByType.get(type));

** EDIT **

Используемый идентификатор ресурса - это itemViewResourceId , определенный в методе getView - добавление нового метода в CustomArrayAdapter , переопределение getDropDownView , как показано ниже, дает мне те же результаты, что и для itemViewResourceId , используемого для всех стилей, и textViewResourceId вообще не используется. Однако удаление getView приводит к использованию textViewResourceId - поэтому я не думаю, что getDropDownView действительно что-то делает:

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        if(convertView == null || convertView.getTag() == null) {
            // new view - populate 
            convertView = inflater.inflate(itemViewResourceId, parent, false);
            convertView.setTag(new Object());
        }
        viewPopulator.populateView(position, convertView, parent, objects.get(position));
        return convertView;
    }

16
задан Martyn 21 September 2011 в 12:17
поделиться