关于listView的史上最奇怪的问题

今天在公司碰到的问题,伤透了我的脑筋。

在我的Acitivity中有两个fragment(f1和f2),两个fragment布局很类似,但是也有不同,使用的是不同的初始化代码。每个fragment中都有ListView,每一个ListView都增加了一个footerView,然后在我的smartisan t1上两个ListView尾部都显示正常,在魅族mx3,以及vivo的一款手机上f2显示不了footerview。没有任何异常报错信息,对调两个fragment的显示位置,发现依旧是该fragment上的该ListView的footer无法显示,另一个依然正常。

f1使用以下代码初始化的

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(findLayoutId(), null);
        mListView = (ListView) view.findViewById(R.id.lv_list);
        if (mListView == null) {
            throw new IllegalArgumentException("can not find R.id.lv_list.");
        }
        mTipsLayout = (TipsLayout) view.findViewById(R.id.custom_tipslayout);
        if (mTipsLayout == null) {
            throw new IllegalArgumentException("can not find R.id.custom_tipslayout.");
        }
        mListView.setOnScrollListener(this);
        mListView.setOnItemClickListener(this);
        mFooterView = getFooterView();
        if (mFooterView == null) {
            mFooterView = inflater.inflate(R.layout.game_view_footer_loading, null);
            mFooterView.findViewById(R.id.custom_loading_view).setVisibility(View.GONE);
            mFooterView.findViewById(R.id.tv_loading_tips).setOnClickListener(
                    new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if (getView().findViewById(R.id.custom_loading_view).getVisibility() == View.VISIBLE) {
                                return;
                            }
                            if (mHasLoadAllData) {
                                return;
                            }
                            sendEmptyBackgroundMessage(MSG_BACK_LOAD_DATA);
                        }
                    });
        }
        mListView.addFooterView(mFooterView);

        mAdapter = createAdapter();
        mListView.setAdapter(mAdapter);
        mTipsLayout.setOnRefreshButtonClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                sendEmptyBackgroundMessage(MSG_BACK_LOAD_DATA);
            }
        });
        if (!mDelayLoad) {
            sendEmptyBackgroundMessage(MSG_BACK_LOAD_DATA);
        }
        // 非ViewPager时因为不会调用 setUserVisibleHint,所以要在这设定
        if (!mHaveSetUserVisibleHint) {
            setDobuleClickCallback();
        }

        return view;
    }

f2使用以下代码初始化的:

<pre name="code" class="java">@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(findLayoutId(), null);
        mListView = (ListView) view.findViewById(R.id.lv_list);
        if (mListView == null) {
            throw new IllegalArgumentException("can not find R.id.lv_list.");
        }
	mAdapter = createAdapter();
        mListView.setAdapter(mAdapter);
        mListView.setOnScrollListener(this);
        mTipsLayout = (TipsLayout) view.findViewById(R.id.custom_tipslayout);
        if (mTipsLayout == null) {
            throw new IllegalArgumentException("can not find R.id.custom_tipslayout.");
        }
        mFooterView = getFooterView(inflater);
        if (mFooterView == null) {
            throw new IllegalArgumentException("footer view can not be null");
        }
        mListView.addFooterView(mFooterView);
        mTipsLayout.setOnRefreshButtonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendEmptyBackgroundMessage(MSG_BACK_LOAD_DATA);
            }
        });
        if (!mDelayLoad) {
            sendEmptyBackgroundMessage(MSG_BACK_LOAD_DATA);
        }
        addHeaderView(mListView);
        // 非ViewPager时因为不会调用 setUserVisibleHint,所以要在这设定
        if (!mHaveSetUserVisibleHint) {
            setDobuleClickCallback();
        }
        return view;
    }

经过几个小时对代码的仔细对照,推敲后,问题终于浮出水面。

结论:
在给ListView设置footerView的代码,要放在setAdapter之前,在部分手机的部分情况下(具体场景我也没推敲出来)如果将addFooterView放在setAdapter后,尽管你调用了
notifyDataSetChanged但是并不能够让ListView加载出这个footerView


版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 01:02:20

关于listView的史上最奇怪的问题的相关文章

史上最全最常用的正则表达式-(基本够用值得收藏)

一.校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 8 正数.负数.和小数:^(\-|\+)?\d+(\.\d+)?$ 9 有两位小数的正实数:^[0-9]

React Native常用第三方组件汇总--史上最全 之一

把我认为最好的知识,拿来与他人分享,是这一生快事之一! React Native 项目常用第三方组件汇总: react-native-animatable 动画 react-native-carousel 轮播 react-native-countdown 倒计时 react-native-device-info 设备信息 react-native-fileupload 文件上传 react-native-icons 图标 react-native-image-picker 图片选择器 reac

Android 自定义控件打造史上最简单的侧滑菜单

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39185641 ,本文出自[张鸿洋的博客] 侧滑菜单在很多应用中都会见到,最近QQ5.0侧滑还玩了点花样~~对于侧滑菜单,一般大家都会自定义ViewGroup,然后隐藏菜单栏,当手指滑动时,通过Scroller或者不断的改变leftMargin等实现:多少都有点复杂,完成以后还需要对滑动冲突等进行处理~~今天给大家带来一个简单的实现,史上最简单有点夸张,但是的确是我目前遇到过的最

这些被称为史上最 “贱” 黑客

导读 史上最“贱”黑客!把你的文件压缩,想解压就拿钱.我辛辛苦苦黑掉了你的电脑,还辛辛苦苦地把你的文件都压缩了.我加班加点,这么拼命,你不给钱就想要回密码,有这样的道理吗?你的内心难道不感到羞愧吗?你的良知难道不煎熬吗?不服来辩! 这大概就是“勒索黑客”的内心独白吧.其实从2015年开始,黑客勒索就已经成为了一种主流的黑色产业.让人愤怒的是:这个行业经过几年的蓬勃发展,居然还分出了流派. “学院派”是最传统最主流的勒索黑客,他们会使用“自主研发”的加密软件,远程进攻你的电脑,然后把重要的文件全部

C语言中史上最愚蠢的Bug

C语言中史上最愚蠢的Bug 本文来自“The most stupid C bug ever”,很有意思,分享给大家.我相信这样的bug,就算你是高手你也会犯的.你来看看作者犯的这个Bug吧.. 首先,作者想用一段程序来创建一个文件,如果有文件名的话,就创建真正的文件,如果没有的话,就调用?tmpfile()?创建临时文件.他这段程序就是HTTP下载的C程序.code==200就是HTTP的返回码. 1 2 3 4 else if (code == 200) {     // Downloadin

史上最简单,一步集成侧滑(删除)菜单,高仿QQ、IOS。

重要的话 开头说,not for the RecyclerView or ListView, for the Any ViewGroup. 本控件不依赖任何父布局,不是针对 RecyclerView.ListView,而是任意的ViewGroup里的childView都可以使用侧滑(删除)菜单.支持任意ViewGroup.0耦合.史上最简单. 概述 本控件从撸出来在项目使用至今已经过去7个月,距离第一次将它push至github上,也已经2月+.(之前,我发表过一篇文章.传送门:http://b

开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

[原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http://blog.csdn.net/caoyouxing/article/details/42418591 主题 开源 安卓开发 http://www.tuicool.com/articles/jyA3MrU Android开源库 自己一直很喜欢Android开发,就如博客签名一样, 我是程序猿,我为自

史上最全的CSS hack方式一览(转载)

做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道一名好的前端,要尽可能不使用hack的情况下实现需求,做到较好的用户体验.可是啊,现实太残酷,浏览器厂商之间历史遗留的问题让我们在目标需求下不得不向hack妥协,虽然这只是个别情况.今天,结合自己的经验和理解,做了几个demo把IE6~IE10和其他标准浏览器的CSS hack做一个总结,也许本文应

网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门

1.前言 即时通讯网整理了大量的网络编程类基础文章和资料,包括<TCP/IP协议 卷1>.<[通俗易懂]深入理解TCP协议>系列.<网络编程懒人入门>系列.<不为人知的网络编程>系列.<P2P技术详解>系列.<高性能网络编程>系列.甚至还有图文并貌+实战代码的<NIO框架入门>等,目的是帮助即时通讯类应用的开发者,至少要掌握网络编程最基本的原理,所谓知其然更要知其所以然.尤其现在移动网络大行其道的时代,在网络环境如此复杂的