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