在使用ListView的header和footer的过程中,如果需要动态的显示和隐藏header和footer的话,以前以为直接setVisibility中的View.GONE就可以。但是在实际使用中发现并不是这样的。直接设置GONE后,虽然元素是隐藏了,但是还是占用着那个区域。感觉就像View.INVISIBILE一样的效果了。后来在网上查找后发现。只要给footer再加上一个layout或者是父级的view就可以了。
例如:(示例代码,header同理)
private ListView listView = new ListView(context);
private TextView footer = new TextView(context);
然后直接
listView.addFooterView(footer);
footer.setVisibility(View.GONE);
这样的话,是不行的。需要
LinearLayout footerParent = newLinearLayout(context);
footerParent.addView(footer);
listView.addFooterView(footerParent);
footer.setVisibility(View.GONE);
这样就可以达到真正想要的效果了。
在知道这个效果之前,都是用remove和add方法,比较郁闷。这样的方式感觉是很迂回的,而且还得加多一个boolean的变量来判断。