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);