尝试下面提到的方法..
Android ListView#addHeaderView
and ListView#addFooterView
方法很奇怪:在设置 ListView 的适配器之前,您必须添加页眉和页脚视图,以便 ListView 可以考虑页眉和页脚 - 否则会出现异常。这里我们添加一个 ProgressBar(旋转器)作为 headerView:
// spinner 是一个 ProgressBar
listView.addHeaderView(spinner);
我们希望能够随意显示和隐藏该微调器,但完全删除它是危险的,因为我们永远无法在不破坏 ListView 的情况下再次添加它 - 请记住,在添加后我们无法添加 HeaderView它的适配器:
listView.removeHeaderView(spinner); //dangerous!
所以我们把它隐藏起来吧!事实证明这也很难。仅隐藏微调器视图本身会导致一个空的但仍然可见的标题区域。
现在尝试隐藏微调器:
spinner.setVisibility(View.GONE);
结果:标题区域仍然可见,但有一个丑陋的空间:
解决方案是将进度条放在包裹其内容的 LinearLayout 中,并隐藏内容。这样,当其内容被隐藏时,包装的 LinearLayout 将崩溃,从而导致 headerView 在技术上仍然存在,但高度为 0dip:
<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>
然后,将布局设置为标题:
spinnerLayout = getLayoutInflater().inflate(R.layout.header_view_spinner, null);
listView.addHeaderView(spinnerLayout);
当我们需要隐藏它时,隐藏布局的内容,而不是布局:
spinnerLayout.findViewById(R.id.spinner).setVisibility(View.GONE);
现在标题从视图中消失。顶部不再有丑陋的空间!