2013-08-16 12 views
13

Mam ListView z stopce z dodatkiem listview.addFooterView(footerView);Listview - stopka na dole ekranu

wszystko działa zgodnie z oczekiwaniami z wyjątkiem w jednym przypadku: gdy elementy mojego ListView jest nie wypełnia cały ekran, to lubię stopka znajdująca się u dołu ekranu, zamiast znajdować się pośrodku. Czy można to łatwo zrobić? Czy powinienem zmienić mój układ?

Dzięki

EDIT: które mogą pomóc (to jest to, co chcę) enter image description here

+0

brzmi jak może chcesz, aby stopka do widoku SEPAR z widokiem zakotwiczonym na dole ekranu, a nie jako potomka 'ListView'. W ten sposób widok stopki nie będzie już przewijany poza ekranem, gdy w 'ListView' jest dużo elementów. Zamiast tego zawsze będzie widoczny na dole. –

+0

Tak, już to zrobiłem, ale to nie jest to, czego się spodziewam –

Odpowiedz

7

Jeśli chcesz, aby zawsze być na dole ekranu, bez względu na to jak długo ListView jest następnie pozbyć się listview.addFooterView(footerView); i używać RelativeLayout. Give your ListView` nieruchomości

android:layout_alignParentTop="true" 

i podać własności do swojej stopce

android:layout_alignParentBottom="true" 

Jeśli to nie rozwiąże problemu, prosimy o bardziej szczegółowe informacje na temat tego, czego oczekujesz i dostarczenie obrazu tego, co chcesz, jeśli to możliwe.

Edit

Po przeczytaniu komentarzy to może działać. Nie może być łatwiejszy sposób, ale można coś zrobić jak

 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 byłoby zwyczaj layout, które można utworzyć z właściwościami I przywołanych powyżej. Powinno to ustawić się na visible, jeśli elementy nie są większe niż można zmieścić na ekranie. Jeśli są bardziej niż w stanie dopasować, zastosuj widok stopki na ListView, tak jak teraz. To może nie być najlepszy sposób, ale jest pierwszą rzeczą, która przychodzi do głowy. Uruchomiłbyś ten kod tuż przed ustawieniem Adapter.

+0

Pytanie edytowane –

+0

Chcesz tylko stopkę widoczną, jeśli 'ListView' nie zajmuje całego ekranu? – codeMagic

+1

Chcę, aby znajdowała się na dole ekranu, jeśli lista nie wypełnia całego ekranu. Jeśli wypełnia cały ekran, chcę, aby stopka działała jak normalna stopka listview (przewijana). –

1

Nie można używać stopki ListView jako stopki dla całego układu. Lepiej z RelativeLayout jako elementu głównego dla układu, a następnie bezpośrednim dzieckiem nim zawierający widok stopki z atrybutem: android: layout_alignParentBottom = „true”

0

Oprócz odpowiedzi @codeMagic, ty można dodać słuchacza, by sprawdzić, gdy adapter jest aktualizowany, a następnie zaktualizować stopce

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

gdzie updateSmartFooter jest funkcja opisał

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); 
      } 
     } 
     } 
} 
Powiązane problemy