<强> Android ListView中headerview的动态显示和隐藏的实现方法强>
<强> 1。动态设置headerview的方法强>
动态设置headerview有两个思路。
<强>方法一强>
将头的布局写在列表项的布局文件中,在适配器中通过判断位置的值是否为0动态控制其显示或隐藏。
代码示例:
。布局文件
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt; LinearLayout xmlns: android=" http://schemas.android.com/apk/res/android " android: layout_width=" match_parent " android: layout_height=" wrap_content " android:背景=" @drawable/item_selector” android:重力=" center_vertical " 面向android:=按怪薄北? & lt;包括 android: id=癅 + id/view_header” android: layout_width="宽和" android: layout_height=" wrap_content " 布局=" @layout/view_header” android:可见性="了"/比; LinearLayout & lt; android: id=癅 + id/view_item” android: layout_width=" match_parent " android: layout_height=" 67下降” android:重力=" center_vertical " android: minHeight=" & # 63; android: attr/listPreferredItemHeight” 面向android:="水平"比; … & lt;/LinearLayout> & lt;/LinearLayout> >之前项目。xml中主要分为两个部分,上面的view_header是头头的布局、下面的view_item是普通项的布局,具体的布局内容这里省略了。然后在MyListViewAdapter.Java的getView方法中处理头的显示问题,如果位置为0,则显示头,隐藏普通的项目。如果位置大于0,则隐藏头,隐藏普通项。
@Override 公众视线getView (int位置、视图convertView ViewGroup父) … 如果(位置==0){ holder.mHeader.setVisibility (View.VISIBLE); holder.mItem.setVisibility (View.GONE); initHeaderView (convertView); 其他}{ holder.mItem.setVisibility (View.VISIBLE); holder.mHeader.setVisibility (View.GONE); initNormalView (convertView); } 返回convertView; >之前以此扩展,若有两钟不同的headview,则新加一个判断条件:
如果(位置==0){ holder.mHeader.setVisibility (View.VISIBLE); holder.mHeader2.setVisibility (View.GONE); holder.mItem.setVisibility (View.GONE); initHeaderView (convertView); }else if(位置==1){ holder.mHeader.setVisibility (View.GONE); holder.mHeader2.setVisibility (View.VISIBLE); holder.mItem.setVisibility (View.GONE); initHeaderView2 (convertView); 其他}{ holder.mItem.setVisibility (View.VISIBLE); holder.mHeader.setVisibility (View.GONE); holder.mHeader2.setVisibility (View.GONE); initNormalView (convertView); } >之前<强>方法二强>
使用listview提供的addHeaderView
为了动态显示和隐藏头,按照惯例,误以为直接通过setVisibility中的View.GONE就可以实现。但是在实际使用中发现并不是这样的,例如:
私人观点mHeader; mHeader=LayoutInflater.from(这).inflate (R.layout.header, null);//加载页脚的布局 mListView.addHeaderView (mHeader); >之前如果想动态隐藏这个标题,惯性思维是直接设置头为消失:(其实这样做是不对的)
mHeader.setVisibility (View.GONE);//隐藏头实际上,直接设置后,虽然元素是隐藏了,但是还是占用着那个区域,此时和视图。INVISIBILE效果一样。
解决办法是,在头布局文件的最外层再套一层LinearLayout/使用,这里称为headerParent。隐藏时隐藏mHeader,而不是headerParent。
view_header.xml
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; LinearLayout & lt; xmlns: android=" http://schemas.android.com/apk/res/android " android: id=癅 + id/mHeaderparent” android: layout_width=" match_parent " android: layout_height=" wrap_content " android:背景=" # FFFFFF " android:重力="中心" android:取向=按怪薄? 比; LinearLayout & lt; android: id=癅 + id/mHeader” android: layout_width=" match_parent " android: layout_height=" wrap_content " android:重力="中心"的在 … & lt;/LinearLayout> & lt;/LinearLayout>Android ListView中headerview的动态显示和隐藏的实现方法