Android ListView ViewHolder и тип - PullRequest
       14

Android ListView ViewHolder и тип

1 голос
/ 20 сентября 2011

Я хочу иметь адаптер Listview, в котором каждая строка использует собственный конверт, так что это преобразование нельзя делить на другой ряд. В принципе, если у меня есть 4 строки, я хотел бы иметь 4 convertview. И при рисовании строки # 3 я должен получить convertview # 3

Для этого я установил для каждой строки свой тип (это позиция) Я думал, что это поможет.

public class myadapter extends BaseAdapter {
final List<String> mdata;

@Override
public int getCount() {
    return mdata.size();
}

@Override
public Object getItem(int p) {
    return p;
}

@Override
public long getItemId(int p) {
    return p;
}

@Override
public int getItemViewType(int p) {
    return p;
}

@Override
public int getViewTypeCount() {
    return mdata.size()  == 0  ? 1 :mdata.size() + 1;
}

@Override
public View getView(int p, View v, ViewGroup arg2) {
    ViewHolder holder = null;
    if (v == null) {
        v = li.inflate(R.layout.data, null);
        holder = new ViewHolder();
        holder._pos = p;
        Log.v("TAG", "creating holder pos " + p + " for " + mdata.get(p));

        {...}

        v.setTag(holder);
    } else {
        holder = (ViewHolder)v.getTag();
        Log.d("TAG", "get convert for " + mdata.get(p)+ " holder " + holder._pos);

    }
    {...}
    return v;
}
public static class ViewHolder {
    public TextView _textView;
    public int _pos;
}
}

Обратите внимание, что позиция в держателе просмотра предназначена только для отладки.

К сожалению, он отображает:

создание держателя поз 0 для строки0 создание держателя поз 1 для строки1 получить конвертирование для держателя string0 1 получить конвертирование для держателя string0 0 get convert для держателя string1 1

Как получить конвертирование get для держателя string0 1?

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Я обнаружил проблему,

getViewTypeCount()

не мог измениться во время выполнения программы.Вы должны установить его на большое значение, даже если вы используете меньше.Это должна быть константа.

0 голосов
/ 21 сентября 2011

Когда я копирую, вставьте ваш код и установите следующее поле ...

final List<String> mdata = Arrays.asList("s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10", "s11", "s12");

... Это работает точно так, как вы ожидаете.
Вы уверены, что не правильно поняли вывод журнала?

...