fragment中onCreateView与onActivityCreated的区别,以及fragment中生命周期的利用
2015-11-12 15:53
337 查看
最近使用了一个自定义的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的数据
代码如下
这是fragment中的set方法
这是重写的fragment的onStart()方法
这是在activity中的对fragment的json赋值
先看看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的数据
代码如下
这是fragment中的set方法
private JSONObject json; public PayforFragment() { // Required empty public constructor } public void setJson(JSONObject json) { this.json = json; }
这是重写的fragment的onStart()方法
@Override public void onStart() { try { JSONObject jos = new JSONObject(json.getString("data")); name.setText(jos.getString("studentName")); phone.setText(jos.getString("phoneNum")); bTime.setText(jos.getString("startDate")); oTime.setText(jos.getString("endDate")); idCard.setText(jos.getString("idCard")); pxbj.setText(jos.getString("trainingInfoName")); je.setText(jos.getString("trainingCost")); } catch (Exception e) { } super.onStart(); }
这是在activity中的对fragment的json赋值
AlreadyPayForFragment fragment= new AlreadyPayForFragment(); fragment.setJson(jsonObject); FragmentManager fragmentManager =getSupportFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction(); ft.replace(R.id.frame, fragment).commit();
相关文章推荐
- WebRTC中最简单loopback摄像头&麦克风的例子
- 行内元素
- 给定字典做分词
- [Cocoa]_[初级]_[如何复制NSView]
- 函数做游戏
- swift之数值类型杂谈(数值)
- [Cocoa]_[初级]_[如何复制NSView]
- pom.xml
- VS中宏 _T、TEXT,_TEXT、L 的作用:
- 我的简单swift爬虫类
- 文法评论
- 图片翻页效果引出的animate.css,很好玩,多动动吧~
- redis配置不当可导致服务器被控制
- BZOJ 2001 [Hnoi2010]City 城市建设 LCT+分治(未成功卡时卡过)
- JAVA EE架构师 需要具备的知识
- Introduction to Algorithm - Summary of Chapter 2(1) - Insertion sort
- Test-05
- [LeetCode]Substring with Concatenation of All Words
- Codeforces Testing Round #12 B - Restaurant ( 贪心 )
- linux awk命令详解