Android ListView中headerview的动态显示和隐藏的实现方法

  

<强> 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的动态显示和隐藏的实现方法