美文网首页
Fragment UI界面不显示

Fragment UI界面不显示

作者: 叛逆的青春不回头 | 来源:发表于2017-05-10 10:55 被阅读0次

一、问题及原因
二、onViewCreated()调用
  1.onViewCreated()什么时候被调用
  2.正确使用姿势


问题及原因

fragment界面不显示


fragment界面不显示 正常显示页面

经过debug发现VoucherListFragment的onCreate()方法调用了,但onViewCreated()没有被调用,而VoucherListFragment的UI布局就是在onViewCreated()方法的inflate的,该方法没有被调用,UI界面自然就展示不出来!那onViewCreated()为啥没被调用呢?

onViewCreated()调用

1.onViewCreated()什么时候被调用

通过查看源码,发现onViewCreated()在FragmentManager的moveToState()方法中被调用,如下所示,但调用的条件是f.mView不为空,f.mView由Fragment的performCreateView()方法创建:

继续看performCreateView()方法:

performCreateView()调用了onCreateView(),也就是f.mView由onCreateView()创建,fragment第一次绘制它的用户界面的时候, 系统会调用此方法。onCreateView()返回为null时,onViewCreated()就不会被调用!继续看看onCreateView()

可以看到onCreateView()默认是返回null的,也就是如果子类fragment不覆写该方法的话,onViewCreated()就不会被调用。如果覆写该方法就返回fragment的界面View,onViewCreated()被调用,还可以看到onViewCreated()的方法说明中,参数view就是onCreateView()返回的View。

2.正确使用姿势

由以上可知从生命周期而言,Fragment在onCreateView运行完成后,Fragment中才创建添加了子组件,所以至少要在onViewCreated中,才能用 fragment.getView().findViewById(R.id.xxx)获取子组件的引用。也就是说如果Fragment有UI视图的话会先执行onCreateView()onViewCreated()
(1)添加一个无UI的Fragment:需要从Activity使用add(Fragment, String)来添加Fragment (为Fragment提供一个唯一的字符串"tag", 而不是一个View ID)。这么做添加了fragment,但它并没有关联到Activity Layout中的一个View,此时不用覆写onCreateView()onCreateView()默认返回null。这个时候不执行onCreateView()onViewCreated()方法;
(2)添加提供UI的Fragment:为宿主activity提供UI的一部分, 此时必须实现onCreateView()方法,返回一个Fragment布局Layout的根View。 当到了Fragment绘制它自己的Layout的时候,Android系统调用它。这个时候执行onCreateView()onViewCreated()

相关文章

  • Fragment UI界面不显示

    一、问题及原因二、onViewCreated()调用1.onViewCreated()什么时候被调用2.正确使用姿...

  • 交互设计中那些必须知道的概念

    用户界面(UI):人和机器互动过程中的显示界面。现在一般把屏幕上显示的图形用户界面(GUI)都简称为用户界面(UI...

  • fragment 懒加载

    fragment 的懒加载 懒加载 什么是懒加载:只有在 fragment 显示在界面的时候,才进行数据的加载 懒...

  • 抓下界面布局

    抓取界面当前显示的界面布局 adb shell uiautomator dump /sdcard/ui.xml a...

  • Fragment重叠问题

    Android横屏下Fragment界面重叠问题 - 阿里云 主要是因为生命周期的问题,当横屏显示fragment...

  • 多线程概述

    主线程的作用: 显示\刷新UI界面处理UI界面(比如点击事件、滚动事件、拖曳事件等) 优缺点: 优点:能适当提高程...

  • Android——使用Fragment遇到的坑

    项目中有这么一个需求:一个界面有tab,通过tab切换多个fragment,要求在fragment显示的时候向服务...

  • UI Fragment

    1.创建UI Fragment 定义布局 创建UI Fragment的类1.实现Fragment的生命周期方法: ...

  • Fragment恢复(重建)后onActivityResult中

    前言 先说场景:Activity A界面有Viewpager+Fragment,Fragment中是列表,在A界面...

  • Feed流组件开发中出现的问题

    出现的问题: 1. 数据与界面的同步,业务逻辑与界面显示的划分 数据变化时,需要更新UI。UI的更新要根据当前数...

网友评论

      本文标题:Fragment UI界面不显示

      本文链接:https://www.haomeiwen.com/subject/csiwtxtx.html