Андроидные списки: заголовки и нижние колонтитулы
В моем 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);