Android ListView: обнаружение, если данные ListView подходят на экране без прокрутки

Возможный дубликат:
Android: using notifyDataSetChanged и getLastVisiblePosition – когда списокView фактически обновлен?

У меня есть простой ListView с несколькими записями. В зависимости от размера и ориентации устройства ListView должен прокручиваться или нет.

У меня также есть изображение на экране, что на самом деле не обязательно. Я хотел бы удалить изображение, если для ListView недостаточно места для прокрутки.

Когда я заполняю свой ListView в onCreate активности, getLastVisiblePosition () еще не действителен, он возвращает -1. Таким образом, я не могу сравнить последний видимый элемент со списком.

Int lastVisiblePos = listView.getLastVisiblePosition (); // возвращает -1

(Если я нажму кнопку позже, чтобы перепроверять, значение будет правильным.)

Использование onScrollingListener слишком поздно, так как изображение не должно отображаться в первую очередь.

Я развиваюсь на уровне API 10.

Какие-либо предложения?

Solutions Collecting From Web of "Android ListView: обнаружение, если данные ListView подходят на экране без прокрутки"

Сравните 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); 

Почему вы ищете проблемы? Вместо вашей идеи вы можете использовать 3 макета:

  1. Виджеты при необходимости – заголовок
  2. ListView – основной макет
  3. 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);