Андроидные списки: заголовки и нижние колонтитулы

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

Я устанавливаю свои представления заголовка и ноги, делая:

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

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

Альтернативно -— и намного проще. вы можете добавить фиксированный компонент выше или ниже ListView, где вы поместите следующую и предыдущую кнопки.

Ответ 3

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

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