zoukankan      html  css  js  c++  java
  • ListView中动态显示隐藏HeaderView和FooterView

    ListView中动态显示和隐藏Header&Footer

    解决思路: 直接设置HeaderView和FooterView.setVisibility(View.GONE)无效, 布局仍然存在, 需要给布局设置父布局, 然后通过控制子布局来显示隐藏布局. 

      1. 给最外层布局, 嵌套父布局, 通过控制子布局进而控制整个布局; 

      2. 给整个布局在代码中动态添加一个父布局, 然后头尾部添加父布局,可以直接操控该布局;

    具体实现如下

    话外篇: 
    1.什么是阴影效果
    2.fading:渐变,衰退 fadingEdge:渐变边缘,衰退边缘
    
    一、删除android ScrollView边界阴影方法方法
    1) 在xml中添加:android:fadingEdge=”none” 
    2) 代码中添加:ScrollView.setHorizontalFadingEdgeEnabled(false);
    
    二、删除ScrollView拉到尽头(顶部、底部),然后继续拉出现的阴影效果
        适用于2.3及以上的 否则不用设置
        android:overScrollMode="never"
    除去ScrollVIew拉到尽头时再拉的阴影效果

    如果需要动态的显示和隐藏footer的话,按照惯例,误以为直接通过setVisibility中的View.GONE就可以实现。但是在实际使用中发现并不是这样的。

    例如,先加载footer布局:

    private View mFooter;
    
    mFooter = LayoutInflater.from(this).inflate(R.layout.footer, null);  //加载footer的布局
    mListView.addFooterView(mFooter);

    如果想动态隐藏这个footer,惯性思维是直接设置footer为gone:(其实这样做是不对的)

    mFooter.setVisibility(View.GONE);  //隐藏footer

    实际上,直接设置GONE后,虽然元素是隐藏了,但是还是占用着那个区域,此时和View.INVISIBILE效果一样。

    footer的正确使用方法如下:

    1、方法一:

    (1)布局文件:在footer布局文件的最外层再套一层LinearLayout/RelativeLayout,我们称为footerParent。

    layout_footer_listview.xml:(完整版代码)

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mFooterparent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        android:gravity="center"
        android:orientation="vertical"
        >
    
        <LinearLayout
            android:id="@+id/mFooter"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:gravity="center"
                android:text="查看更多"
                android:textColor="#ff0000"
                android:textSize="20sp"/>
        </LinearLayout>
    </LinearLayout>
    View Code

    (2)加载footer和footerParent的布局:

    private View mFooter; //footer
    private View mFooterParent;  //footer的最外面再套一层LinearLayout
    
    mFooterParent = LayoutInflater.from(getActivity()).inflate(R.layout.footerparent_listview, null);//加载footerParent布局
    mFooter = mFooterParent.findViewById(R.id.footer);
    listView.addFooterView(mFooterParent);  //把footerParent放到ListView当中
    
    mFooterParent.setOnClickListener(MainActivity.this); //绑定监听事件,点击查看全部列表

    (3)设置footer为gone:(不是设置footerParent为gone)

    mFooter.setVisibility(View.GONE);

    2、方法二:或者直接在代码中为footer添加footerParent也可以,如下:

    private View mFooter; //footer
    mFooter = LayoutInflater.from(getActivity()).inflate(R.layout.footer_listview, null);//加载footer布局
    
    LinearLayout mFooterParent = new LinearLayout(context);  
    mFooterParent.addView(mFooter);//在footer的最外面再套一层LinearLayout(即footerParent)
    listView.addFooterView(mFooterParent);//把footerParent放到ListView当中

    当需要隐藏footer的时候,设置footer为gone:(不是设置footerParent为gone)

    mFooter.setVisibility(View.GONE);
    以一颗童心善待生活
  • 相关阅读:
    window 7/8/10 安装nginx
    全面了解 Nginx 到底能做什么
    MySQL优化
    office 2013 破解工具 及 软件下载
    centos6+如何对外开放80,3306端口号或者其他端口号
    CentOS 中查看软件的版本号
    CentOS 中安装 mysql 5.7+
    STL入门大全(待编辑)
    Feign
    微信公众号
  • 原文地址:https://www.cnblogs.com/lizhilin2016/p/7813771.html
Copyright © 2011-2022 走看看