Подтвердить что ты не робот

Listview - нижний колонтитул внизу экрана

У меня есть ListView с нижним колонтитулом, добавленным с помощью listview.addFooterView(footerView);

Все работает как ожидалось, исключая в одном случае: когда мои элементы списка не заполняют весь экран, я хотел бы, чтобы нижний колонтитул находился внизу экрана, а не был посередине. Есть ли способ сделать это легко? Или я должен изменить свой макет?

Спасибо

EDIT: это может помочь (это то, что я хочу) enter image description here

4b9b3361

Ответ 1

Если вы хотите, чтобы он всегда находился в нижней части экрана, независимо от того, как долго ваш ListView, а затем избавиться от listview.addFooterView(footerView); и использовать RelativeLayout. Give your ListView` свойство

 android:layout_alignParentTop="true"

и присвойте свой нижний колонтитул

 android:layout_alignParentBottom="true"

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

Edit

После прочтения комментариев это может сработать. Возможно, вам будет проще, но вы можете сделать что-то вроде

     listView.post(new Runnable()
     {       
         public void run()
        {
            int numItemsVisible = listView.getLastVisiblePosition() - 
            listView.getFirstVisiblePosition();
            if (itemsAdapter.getCount() - 1 > numItemsVisible)
            {   
                 // set your footer on the ListView
            }
            else
            {
                 footerView.setVisibility(View.VISIBLE);
            }
         }

footerView будет пользовательским layout, который вы создадите со свойствами, указанными выше. Это должно установить значение visible, если элементы не больше, чем могут помещаться на экране. Если они больше, чем могут поместиться, вы примените нижний колонтитул на ListView, как сейчас. Это может быть не самый лучший способ, но это первое, что приходит на ум. Вы должны запустить этот код перед установкой Adapter.

Ответ 2

Вы не можете использовать нижний колонтитул ListView для нижнего колонтитула для всего макета. Вам лучше использовать RelativeLayout в качестве корневого элемента для вашего макета, а затем прямое дочерние элементы, содержащие нижний колонтитул с атрибутом: андроид: layout_alignParentBottom = "истина"

Ответ 3

В дополнение к ответу @codeMagic вы можете добавить слушателя, чтобы проверить, когда ваш адаптер обновляется, а затем обновлять нижний колонтитул

registerDataSetObserver(new DataSetObserver() {
            @Override
            public void onChanged() {
                super.onChanged();
                updateSmartFooter();
            }
        });

где updateSmartFooter - это функция, которую он описал

 private void updateSmartFooter {
     listView.post(new Runnable()
     {       
         public void run()
        {
            int numItemsVisible = listView.getLastVisiblePosition() - 
            listView.getFirstVisiblePosition();
            if (itemsAdapter.getCount() - 1 > numItemsVisible)
            {   
                 // set your footer on the ListView
            }
            else
            {
                 footerView.setVisibility(View.VISIBLE);
            }
         }
      }
}