Как создать другое представление для последнего элемента ArrayAdapter? - PullRequest
0 голосов
/ 07 февраля 2011

Я получаю список элементов из 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 устанавливается значение «исчез», поэтому его не нужно изменять в остальном. Когда я удаляю if-else и оставляю только код внутри else, список работает правильно, но мне нужна следующая ссылка. Есть идеи по поводу странного поведения? Пожалуйста, дайте мне знать, если вам нужен какой-либо дополнительный код или вам необходимо выяснить, что происходит.

1 Ответ

1 голос
/ 07 февраля 2011

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

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

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 ...
...