如何實現可動態調整隱藏header的listview

(轉自:http://blog.sina.com.cn/s/blog_70b9730f01014sgm.html)html

需求:根據某種須要,可能須要動態調整listview的頁眉頁腳,譬如將header做爲顯示板使用。android

難點:listView.addHeaderView()方法必須在setAdapter()方法前調用,不然就會拋異常。至於爲何會拋異常,查看下ListView的源代碼便可發現。所以,在設置HeaderView以後又想將headerView移除或者隱藏,則須要繞很大的彎子:將adapter保存起來-移除headerView-(或者更換headerview)-再將adapter設置上去。
 
隱藏headerview思路:使用View.GONE屬性進行隱藏
嘗試1.itemView結構以下:
1 <LinearLayout android:id="@+id/item_root"
2     android:layout_width="fill_parent"
3     android:layout_height="50dip"
4     android:orientation="vertical" >
5 <TextView  android:id="@+id/tv_1" />
6 <TextView  android:id="@+id/tv_2" />
7 </LinearLayout >
按道理,最後一句應該能夠起到隱藏headerView的目的,但實際效果(魅族MX上測試發現),item_root的地方的確沒有控件了,但item_root佔用的50dip高度還在,即原來headerView的地方變成了一片空白區域!和View.INVISIBILE效果同樣了,汗死!
 
 繼續嘗試以下,修改itemView的結構:
1 <LinearLayout android:id="@+id/item_root"
2     android:layout_width="fill_parent"
3     android:layout_height="50dip"
4     android:orientation="vertical" >
5  <LinearLayout android:id="@+id/item_container"
6 <TextView  android:id="@+id/tv_1" />
7 <TextView  android:id="@+id/tv_2" />
8  </LinearLayout>
9 </LinearLayout >
此結構較以前的結構增長了一個多餘的Layout(item_container)來囊括item內部控件。此時,若是在item_container .setVisibility(View.GONE)則能夠完美實現隱藏HeaderView的目的!
結論:View.GONE屬性貌似不做用在根Layout上。
 
新的問題:
若是在item_root上使用了Shape背景,且此背景存在MinSize,那麼此方法又失效了。。。
規避處理:若是的確必需要在HeaderView上添加背景background的話,那麼請將background設置在item_container上吧,不要設置在item_root上,如此就能夠規避新的問題了。
相關文章
相關標籤/搜索