Android ListView: обнаружение, если данные ListView подходят на экране без прокрутки
Возможный дубликат:
Android: using notifyDataSetChanged и getLastVisiblePosition - когда фактическое обновление listView?
У меня есть простой ListView с несколькими записями. В зависимости от размера и ориентации устройства, ListView должен прокручиваться или нет.
У меня также есть изображение на экране, что действительно не нужно. Я бы хотел удалить изображение, если для ListView недостаточно места для прокрутки.
Когда я заполняю свой ListView в onCreate активности, getLastVisiblePosition() еще не действителен, он возвращает -1. Таким образом, я не могу сравнить последний видимый элемент со списком.
int lastVisiblePos = listView.getLastVisiblePosition();//возвращает -1
(Если я нажму кнопку позже, чтобы перепроверять, значение будет правильным.)
Использование onScrollingListener слишком поздно, так как изображение не должно отображаться в первую очередь.
Я развиваюсь на уровне API 10.
Любые предложения?
Ответы
Ответ 1
Сравните getLastVisiblePosition()
с getCount()
в Runnable, чтобы увидеть, подходит ли весь ListView на экране, как только он будет нарисован. Вы также должны проверить, подходит ли последняя видимая строка целиком на экране.
Создайте Runnable:
ListView listView;
Runnable fitsOnScreen = new Runnable() {
@Override
public void run() {
int last = listView.getLastVisiblePosition();
if(last == listView.getCount() - 1 && listView.getChildAt(last).getBottom() <= listView.getHeight()) {
// It fits!
}
else {
// It doesn't fit...
}
}
};
В onCreate()
очередь Runnable в обработчике ListView:
listView.post(fitsOnScreen);
Ответ 2
Почему вы ищете проблемы? Вместо вашей идеи вы можете использовать 3 макета:
- Виджеты при необходимости - заголовок
- ListView - основной макет
- ImageView или другие виджеты - нижний колонтитул
ListView lv = (ListView) findViewById(R.id.listView);
View header = getLayoutInflater().inflate(R.layout.header_layout, null);
View footer = getLayoutInflater().inflate(R.layout.foorer_layout, null);
lv.addHeaderView(headerComment);
lv.addFooterView(footerComment);