`
zyallday
  • 浏览: 26775 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

ListFragment “Content view not yet Created”

 
阅读更多
最近开发一直在使用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使用

    public void onListItemClick(ListView l, View v, int position, long id) { Toast.makeText(getActivity(), "点击了" + position, Toast.LENGTH_SHORT).show(); } } ``` 在实际项目中,开发者可以根据需求灵活...

    android之fragment之ListFragment

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String item = items.get(position); Toast.makeText(getActivity(), "Clicked on " + item, Toast.LENGTH_SHORT).show();...

    ListFragment

    **ListFragment:Android开发中的列表视图组件** 在Android应用开发中,`ListFragment`是Android SDK提供的一种特殊类型的Fragment,专门用于展示列表数据。它继承自`Fragment`类,并集成了`ListView`的功能,使得...

    Android ListFragment实例Demo

    在Android开发中,`ListFragment`是Android Support Library或AndroidX库中的一种组件,它用于在界面中展示列表数据。`ListFragment`是`Fragment`的子类,它集成了`ListView`的功能,使得开发者可以更方便地在应用中...

    Android自定义ListFragment 显示

    在Android开发中,`ListFragment`是一个非常实用的组件,它是`Fragment`的子类,专为在界面上显示一个可滚动的列表而设计。本文将深入探讨如何自定义`ListFragment`以满足特定需求,并结合给定的标签“源码”和...

    使用了 ListFragment 类显示 ShakespeareIntrumented(莎士比亚著作)

    在Android应用开发中,`ListFragment` 是一个非常实用的组件,它继承自 `Fragment` 类,主要用于在界面上展示列表数据。在这个场景中,我们看到的项目是关于使用 `ListFragment` 来显示莎士比亚的作品。让我们深入...

    左边listfragment显示标题右边fragment显示内容

    标题"左边listfragment显示标题右边fragment显示内容"正是描述了这样一个场景,它强调在手机横屏模式下,使用Fragment而非Activity来展示内容。 Fragment是Android SDK中的一个组件,它允许开发者在单个Activity中...

    android Fragment 实例 ListFragment listiew 下拉刷新 上拉加载 横向滑动事件监听

    本实例将探讨如何在Fragment中使用ListFragment,实现ListView的下拉刷新、上拉加载以及横向滑动事件监听。 1. **Fragment基本概念**: Fragment是一个可嵌入到Activity中的UI片段。它可以有自己的生命周期,接收...

    Android App中使用ListFragment的实例教程

    在Android应用程序开发中,ListFragment是Android SDK提供的一种特殊类型的Fragment,它的主要功能是展示一个列表视图(ListView)。ListFragment简化了在Activity中集成列表展示的流程,因为它内置了对ListView的...

    Android ListFragment实例Demo(自定义适配器)

    上一篇文章介绍了ListFragment,其中的ListView并没有自定义适配器,实际上在实际开发中常会用到自定义适配器,是实现更复杂的列表数据展示。所以这篇文章增加了自定义适配器,来进行ListView数据的展示

    Android之listfragment的使用例子

    1、fragment简介 我对fragment的理解是基于activity的,对于大多数的基本开始发时,我们最先遇到的就是用activity来开发。 ...2、ListFragment实例讲解 最终效果 最终效果如上图所示 2.1、首先我

    android-listfragment:Android ListFragment 示例。 (活动xml中的片段元素)

    在Android开发中,`ListFragment`是Android Support Library或AndroidX库的一部分,它是一个轻量级的组件,用于在活动中展示列表数据。`ListFragment`是`Fragment`的一个子类,专为显示`ListView`而设计,简化了在...

    Fragment里添加ListView不要用ListFragment

    然而,当涉及到在`Fragment`中添加`ListView`时,开发者通常会遇到一个问题,那就是不应该直接使用`ListFragment`。本篇文章将解释为什么在`Fragment`中添加`ListView`时不推荐使用`ListFragment`,并提供一种替代的...

    Android-ListFragment

    在Android开发中,`ListFragment`是Android Support Library(现在称为AndroidX库)的一部分,它是一个简化版的`Fragment`,专门用于展示列表视图。`ListFragment`结合了`ListView`的功能和`Fragment`的灵活性,使得...

    移动互联网-特殊碎片ListFragment.ppt

    移动互联网应用

    Lisfragment的使用

    8. **布局嵌套**: `ListFragment`可以与其他`Fragment`或者View一起在Activity的布局文件中嵌套使用,构建复杂的UI结构。 9. **数据更新**: 当数据源发生变化时,可以通过调用`adapter.notifyDataSetChanged()`通知...

    android获取wifi列表

    本教程将详细介绍如何基于ListFragment框架来实现这一功能,这对于初学者来说是一个很好的实践项目,能够帮助巩固和提升Android开发的基本技能。 首先,我们需要理解ListFragment的概念。ListFragment是Android ...

    fragment-list-example:一个简单的Android应用程序中使用的ListFragment的工作示例

    - `onListItemClick(ListView l, View v, int position, long id)`:`ListFragment`提供此回调方法,当用户点击列表项时会被调用。开发者可以在此处理点击事件,如跳转到新页面或执行其他操作。 5. **集成到应用**...

Global site tag (gtag.js) - Google Analytics