Spróbuj podejście wymienionych poniżej ..
Android ListView#addHeaderView
i ListView#addFooterView
metody są dziwne: musisz dodać widoki nagłówka i stopki, zanim ustawisz adapter ListView, aby ListView mógł uwzględnić nagłówki i stopki - w przeciwnym razie otrzymasz wyjątek. Tutaj dodamy ProgressBar (pokrętła) jako headerView:
// spinner jest ProgressBar
listView.addHeaderView(spinner);
Chcielibyśmy, aby móc pokazać i ukryć ten spinner do woli, ale usunięcie go jest wręcz niebezpieczne, ponieważ nigdy nie być w stanie go dodać ponownie bez niszczenia ListView - pamiętać, że nie możemy po addHeaderView mamy to adapter:
listView.removeHeaderView(spinner); //dangerous!
Więc go ukryć! Okazuje się, że to też jest trudne. Po prostu ukrycie samego widoku tarczy skutkuje pustym, ale wciąż widocznym obszarem nagłówka.
Teraz starają się ukryć tarczy:
spinner.setVisibility(View.GONE);
Wynik: obszar nagłówka nadal widoczny z brzydkiego przestrzeni:
Rozwiązaniem jest umieszczenie postęp pasek w LinearLayout, który otacza zawartość i ukrywa zawartość.W ten sposób LinearLayout owijania załamie się, gdy jej treść jest ukryta, w wyniku headerView, technicznie nadal obecne, ale 0dip wysoka:
<LinearLayout
xmlns:a="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<!-- simplified -->
<ProgressBar
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Następnie wybrać układ jako nagłówek:
spinnerLayout = getLayoutInflater().inflate(R.layout.header_view_spinner, null);
listView.addHeaderView(spinnerLayout);
a kiedy trzeba go ukryć, ukryć zawartość układu, a nie układ:
spinnerLayout.findViewById(R.id.spinner).setVisibility(View.GONE);
teraz nagłówek zniknie z pola widzenia. Nigdy więcej brzydkiej przestrzeni na górze!
można usunąć widok nagłówka jeśli masz zmienną, aby wskazywała header, zobacz ten link: http://stackoverflow.com/a/39286390/1817569 – Hamid