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>

(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);

ListView中动态显示隐藏HeaderView和FooterView的更多相关文章

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

    ListView的模板写法 ListView模板写法的完整代码: android代码优化----ListView中自定义adapter的封装(ListView的模板写法) 以后每写一个ListView ...

  2. ListView设置headerview和footerview

    [简介]headerview就是通常看到的那种listview手势下滑露出上面的部分,下拉到一定位置,松手会开始请求网络数据,然后刷新listview的列表.footerview一般就是listvie ...

  3. [Android Bug] ListView中Header, Footer无法隐藏(gone)的问题

    ListView中Header.Footer View应该是会应该遇到, 比如说,滚动到底部时,自动开始加载: 对于一些应用市场,会在Header中加上ViewFlipper做应用推荐(滚动的那种,好 ...

  4. Android 编程下 ListView 的 HeaderView 和 FooterView 不可选择点击

    在 ListView 里,HeaderView 和 FooterView 也占一行,与其他的 item 一样,可以点击,有索引,HeaderView 的索引为0.如果要使这两项不可点击,可以使用下面的 ...

  5. 【转】listView中,checkBox的显示和隐藏

    原文网址:http://www.cnblogs.com/vicma/p/3460500.html 在listView中,每个item都有一个ChexBox,当显示的时候在listView外面设置一个按 ...

  6. Android 5.X新特性之为RecyclerView添加HeaderView和FooterView

    上一节我们讲到了 Android 5.X新特性之RecyclerView基本解析及无限复用 相信大家也应该熟悉了RecyclerView的基本使用,这一节我们来学习下,为RecyclerView添加H ...

  7. Android GridView增加HeaderView和FooterView的实现

    Android GridView增加HeaderView和FooterView的实现 做的项目中遇到一个问题,需要实现一个页面 页面的上面是一个自定义的View和GridView,当向下滚动屏幕的时候 ...

  8. (转载)解决ListView中使用EditText所遇到的一些冲突

    大家都知道在listView中使用editText,在输入过程中是有冲突的.今天稍微研究了一下这个问题,有一点点小小的心得和大家一起分享下. 首先建立一个最简单的demo,主界面就是一个ListVie ...

  9. winform实现listview中combox

    一.概要 因为要在项目中要在ListView中实现下拉框选择,用DataGrid的话,一个不美观,二个绑定数据麻烦,参考网上一种做法,就是单击ListView时,判断单击的区域,然后将Combox控件 ...

随机推荐

  1. springcloud(七): 使用Feign调用Eureka Server客户端服务

    当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻. ...

  2. hdu_1040_As Easy As A+B_201308191751

    As Easy As A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  3. Unique Paths I,II

    题目来自于:https://leetcode.com/problems/unique-paths/ :https://leetcode.com/problems/unique-paths-ii/ A ...

  4. 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法

    此处共同拥有两段代码: 一. 这段代码比較全面,当中參考了github上的相关源代码. 能够说功能强大. //Dijkstra(迪杰斯特拉算法) #include <stdio.h> #i ...

  5. tiny4412移植opencv2.4.7手记

    在买了新的4412板子后.打算趁着刚成功在6410上移植过的经验,速度解决下.不想出现了各种问题.小结下: 1.关于opencv的移植: tiny4412的linux3.5上,须要把opencv的li ...

  6. Google Code Jam在线測试题目--Alien Language

    Problem After years of study, scientists at Google Labs have discovered an alien language transmitte ...

  7. Hypercall

    在Linux中.大家应该对syscall很的了解和熟悉,其是用户态进入内核态的一种途径或者说是一种方式.完毕了两个模式之间的切换:而在虚拟环境中,有没有一种类似于syscall这样的方式.可以从no ...

  8. oc40--类的启动过程

    // // main.m // 类的启动过程 #import <Foundation/Foundation.h> #import "Person.h" #import ...

  9. HDU 5692 Snacks(DFS序+线段树)

    Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  10. 【HNOI 2004】 L语言

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1212 [算法] 字典树 + dp [代码] #include<bits/std ...