最近开发一直在使用ListFragment,ListFragment有一个 setListShown(boolean shown)的方法,当传入参数为false的时候,ListFragment显示一个进度条,然后在这段时间时间里面可以异步加载数据,然后等到数据加载完成以后再次调用 setListShown(true),然后隐藏进度条,显示ListView。
但是这个方法必须在 ListView已经创建以后才可以,否则就会抛出一个“Content view not yet created”,也就是 最好调用这个方法是在 OnActivityCreated之后和 OnDestroy之前。最近笔者在使用它的时候因为在 OnActivityCreated 使用了一个 AsyncTask来异步加载数据,但是有时候莫名其妙程序就会挂掉,然后在Log里看到“Content view not yet Created”,各种查资料都没有解决问题,程序还是时不时就挂了不知道,然后留下一个“Content view not yet Created”孤零零地躺在Logcat里面。
后来笔者突然想起来,ListFrament维护的listview在 onCreateView时候被创建,但是在 OnDestroy之后就被销毁了,会不会是因为异步加载数据的时候,当数据加载完成以后,ListFragment已经被Destroy了,所以当在AsyncTask的 doInBackgroud方法(在子先撑)执行完毕之后,onPostExecute里面调用 setListShown的时候,listView已经不存在,所以程序才crash掉呢?
经过测试发现,原因就是这样。
这种情况比较容易出现的情况是ViewPaper和ListFragment混合使用并且ListFramgnt是通过异步加载数据的时候,因为 ViewPaper能缓存的页面数量是有限的(通过ViewPaper.setOffscreenPageLimit(int limit)来控制),当ViewPaper滑动到Limit之外的时候 之前缓存的ListFragment就会被销毁,这个时候 因为之前的ListFragment的AsyncTask已经开始执行,当执行结束的时候 发现 ListView已经销毁,所以再调用 setListShown()的时候,程序就crash了。
解决的办法就是在ListFragment的 onStop方法(onDestroy之前)里面把正在执行的 AsyncTask cancel掉,这样就不会再调用setListShown了。
分享到:
相关推荐
DialogFragment和ListFragment使用
ListFragment是安卓Fragment的子类
有关ListFragment的简介和用法
该篇文章是一个ListFragment的一个实例,通过了解该实例,更能了解比较常用的ListFragment的用法,以及各Fragment之间的数据传递。
使用碎片 显示Shakepeare (莎士比亚) 著作内容,使用了 ListFragment 类 ShakespeareIntrumented(莎士比亚著作)
上一篇文章介绍了ListFragment,其中的ListView并没有自定义适配器,实际上在实际开发中常会用到自定义适配器,是实现更复杂的列表数据展示。所以这篇文章增加了自定义适配器,来进行ListView数据的展示
ListFragment继承于Fragment。因此它具有Fragment的特性,能够作为activity中的一部分,目的也是为了使页面设计更加灵活。 相比Fragment,ListFragment的内容是以列表(list)的形式显示的。ListFragment的布局默认...
左边listfragment显示标题,手机横屏的时候右边fragment显示内容,不是采用activity 显示内容
NULL 博文链接:https://lihao312.iteye.com/blog/2095562
学习Fragment开发, 轻松实现 android Fragment 实例 Listfragment listiew 下拉刷新 上拉加载 横向滑动事件监听
1、fragment简介 我对fragment的理解是基于activity的,对于大多数的基本开始发时,我们最先遇到的就是用activity来开发。 ...2、ListFragment实例讲解 最终效果 最终效果如上图所示 2.1、首先我
Android ListFragment
移动互联网应用
android-listfragment Android ListFragment 示例。 (活动xml中的片段元素)
主要介绍了Fragment里添加ListView不要用ListFragment,需要的朋友可以参考下
Listfragment 使用demo 替换fragment
android – getActivity().findViewById(R.layout.contacts_list_view) returns null – Stack Overflow AndroidGUI27中findViewById返回null的快速解决办法 – 玄机逸士的专栏 – 博客频道 – CSDN.NET