Как создать другое представление для последнего элемента ArrayAdapter?

Я получаю список элементов из URL-адреса и отображаю их в ListView с помощью настраиваемого ArrayAdapter. Я отображаю не более 25 результатов, но получаю до 26 из URL-адреса, потому что я хочу отображать ссылку «следующая», если их больше 25. Я пытаюсь найти способ сделать так, чтобы последний элемент в представлении просто отображался следующая ссылка вместо изображения и два TextView, отображаемых другими элементами. При прокрутке вниз все элементы отображаются так, как они должны быть, но последний элемент продолжает выглядеть как остальные. При прокрутке вверх каждый пятый элемент пуст (можно сказать, что он все еще там из-за разделительных линий).

Внутри getView:

if (position + 1 == limit) { // Limit = 26, corresponding position is 25
    Log.e("Last Item", String.valueOf(position));
    // Gone
    image.setVisibility(8);
    text.setVisibility(8);

    // Visible
    next.setVisibility(0);
} else {
    if (item != null) {

        Log.e("Other item", String.valueOf(position));
        if (top_text != null) {
            top_text.setText(item.getItemTitle(), BufferType.SPANNABLE);
        }
        if(bottom_text != null){
            bottom_text.setText(item.getItemDescription());
        }
    }
}
return view;

В ddms он печатает тег «Последний элемент» только для последнего элемента и тег «Другой элемент» для остальных, но элементы не изменяются на основе if-else. В XML для параметра next установлено значение «ушел», поэтому его не нужно изменять в else. Когда я удаляю if-else и оставляю только код внутри else, список работает правильно, но мне нужна следующая ссылка. Любые идеи о причине странного поведения? Пожалуйста, дайте мне знать, если вам нужно увидеть какой-либо дополнительный код или вам нужно разъяснение того, что происходит.


person Cameron    schedule 07.02.2011    source источник


Ответы (1)


Пожалуйста, опубликуйте полный код getView. Вы возвращаете представление; а что такое view, это convertView или надутый из xml?

Вот как я получаю другое представление для последнего элемента: 1. создайте 2 макета, первый для обычных элементов, второй для последнего элемента 2. в getView (позиция int, View convertView, ViewGroup parent)

View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) mContext
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.xxx, null);
} else {
    //check if view is not layout we need (based on position), we need inflate from xml
}

//set text ...
person merrymenvn    schedule 07.02.2011
comment
представление конвертируется в вид. Я никогда не думал просто использовать другой макет, но это сработало. Спасибо! - person Cameron; 07.02.2011