探究Fragment oncreateview 和 onActivityCreated 方法

本文探讨了在Android Fragment中,为什么在onActivityCreated()而不是onCreateView()方法中初始化非静态View的原因。作者通过分析Fragment的生命周期,指出在onCreateView()中初始化可能因Context问题导致异常,而在onActivityCreated()中则更安全。此外,文章还提出了在Fragment中显示Activity数据的简单方法,避免了使用构造方法和回调的复杂性。

最近使用了一个自定义的view在activity中运行正常,可在fragment中就奔溃,无提示,之前view是在onCreateView中初始化并调用的,崩溃,换到onActivityCreated之后,运行ok了,这是什么原因呢??

先看看fragment的生命周期,首次展示界面时


可以看到onActivityCreated是在onCreateView之后调用的,那么如果在onCreateView方法的时候直接初始化view,并调用,和在onActivityCreated时调用,有什么区别呢

网上有网友回复

If your view is static, then moving any code to the onActivityCreated method is not necessary. But when you - for instance, fill some lists from the adapter, then you should do it in the onActivityCreated method as well as restoring the view state when setRetainInstance used to do so.

Also accessing the view hierarchy of the parent activity must be done in the onActivityCreated, not sooner.

哦,,大概意思就是如果view是静态的,那么没有必要在onActivityCreated 方法去调用,大多数的自定义的view,初始化时都需要一个context,而activity是context的子类,所以在onCreateView方法的时候非静态的view初始化调用可能出现异常,所以对于非静态的view,最好在onActivityCreated方法调用


fragment 生命周期的利用

生命周期有 onAttach(),onCreate(),onCreateView(),onActivityCreated();此为创建时会执行的方法

onstart(),onResume(),是变得可见时会执行的方法

onPause(),onStop(),是进入后台会执行的方法。

销毁时会执行 onpause(),onStop(),onDestroyView(),Ondestroy();

我们经常将fragment放在activity中使用,数据是activity获得,而在fragment中展示,那么如何比较简单的实现,在fragment中展示activity的数据呢,

1 我们首先想到的就是,在fragment中增加一个属性,如在fragment中定义一个list集合,然后在activity中调用fragment的构造方法时来给list赋值,可是fragment跟普通的类不一样,他有自己的生命周期,这样做会报错。

2 那么我们是不是就一定要利用回调来实现呢,其实不用,我们刚刚看了onStart()方法,是在进入前台可见时才调用,那么

我们可以在fragment中添加list的set方法,在activity中new 了fragment后,调用set方法给list赋值,最后,重写fragment的onStart()方法,在此方法中展示list的数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值