У меня есть ListView с разными макетами для разных элементов. Некоторые элементы являются разделителями. Некоторые элементы разные, потому что они содержат разные типы данных и т.д.
Я хочу реализовать ViewHolders, чтобы ускорить процесс getView, но я не совсем уверен, как это сделать. Различные макеты имеют разные части данных (что затрудняет именование) и разные количества видов, которые я хочу использовать.
Как мне это сделать?
Лучшей идеей, которую я могу придумать, является создание общего ViewHolder с элементами X, где X - количество просмотров в макете элементов с наибольшим количеством из них. Для других представлений с небольшим количеством представлений я просто использую подраздел этих переменных в ViewHolder. Так сказать, у меня есть 2 макета, которые я использую для двух разных предметов. У одного есть 3 TextViews, а у другого - 1. Я бы создал ViewHolder с тремя переменными TextView и использовал только один из них для моего другого элемента. Моя проблема в том, что это может стать действительно уродливым и выглядеть действительно взломанным; особенно когда макет элемента может иметь много видов для разных типов.
Вот очень простой getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    MyHolder holder;
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.layout_mylistlist_item, parent, false);
        holder = new MyHolder();
        holder.text = (TextView) v.findViewById(R.id.mylist_itemname);
        v.setTag(holder);
    }
    else {
        holder = (MyHolder)v.getTag();
    }
    MyListItem myItem = m_items.get(position);
    // set up the list item
    if (myItem != null) {
        // set item text
        if (holder.text != null) {
            holder.text.setText(myItem.getItemName());
        }
    }
    // return the created view
    return v;
}
Предположим, что у меня были разные типы макетов строк, я мог бы иметь ViewHolder для каждого типа строки. Но какой тип я бы назвал "держателем" на вершине? Или я могу объявить держатель для каждого типа, а затем использовать его для типа строки, в которой я включен.