списки просмотра Android: верхний и нижний колонтитулы - PullRequest
14 голосов
/ 07 января 2010

В моем ListActivity мне нужно, чтобы представления верхнего и нижнего колонтитула (вверху и внизу списка) использовались как кнопки предыдущей и следующей страниц в моем списке соответственно, потому что я хочу отображать только 20 элементов одновременно .

Я установил заголовок и вид стопы, выполнив:

getListView().addHeaderView(myHeaderView);
getListView().addFooterView(myFooterView);
setListAdapter(adapter);

Это прекрасно работает, но мне нужно динамически удалять и добавлять эти представления верхнего и нижнего колонтитула, потому что некоторые страницы моего списка могут не иметь кнопки следующей страницы или кнопки предыдущей страницы.

Проблема в том, что я не могу вызвать addHeaderView или addFooterView после вызова setListAdapter.

Есть ли способ обойти это?

Ответы [ 3 ]

10 голосов
/ 07 января 2010

Почему бы просто не свернуть верхний и нижний колонтитулы до нулевой высоты или не выделить кнопки серым цветом (даже лучше).

И лучший пользовательский опыт, на мой взгляд, состоял бы в динамической загрузке большего количества элементов при необходимости (например, при прокрутке), как это делает встроенное приложение Gmail.

3 голосов
/ 07 января 2010

Да, это ошибка или недосмотр в компоненте ListView. Вы можете обойти это, написав свой собственный WrapperListAdapter, который обрабатывает добавление и удаление фиксированных элементов списка, но я могу сказать, что это не совсем просто сделать.

В качестве альтернативы & mdash; и намного проще & ndash; Вы можете добавить фиксированный компонент выше или ниже ListView, где вы размещаете следующую и предыдущую кнопки.

2 голосов
/ 29 июня 2010

Как насчет сброса адаптера каждый раз, когда вам нужно добавить представление заголовка, например, так:

ListView.FixedViewInfo headerInfo = getListView().new FixedViewInfo();
headerInfo.isSelectable=false ;
headerInfo.view = feedInfoView;
headerInfos.add(headerInfo);
headerViewListAdapter = new HeaderViewListAdapter(headerInfos,null,adapter);
getListView().setAdapter(headerViewListAdapter);
...