《第一行代码》Fragment学习笔记

1、Fragment的继承问题

建议继承自android.support.v4.app.Fragment,可以让碎片在所有版本中保持功能一致;
若用android.app.Fragment,4.2之前的版本就无法运行


2、onCreateView参数解释

View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)

View是什么?
返回的 View 是碎片布局的根视图,不是很懂。

Bundle是什么?

Bundle是一个可以存储键值对的类

如:

intent.putString("key",value)//本来就可以向intent直接传递键值对


----------

bundle..putString("key",value)//Bundle存储了键值对数据
intent.putExtras(bundle)//将Bundle传给了Intent,也就向intent传了键值对


因此在onCreateView()与onCreate()中可以用Bundle恢复碎片销毁前的一些数据

ViewGroup是什么?

ViewGroup 参数是您的碎片布局将插入到活动中的父 ViewGroup


3、LayoutInflater是个什么?inflate参数解释

View inflate(int resource, ViewGroup root, boolean attachToRoot)

说明:Inflate a new view hierarchy from the specified xml resource.

①resource是碎片要加载的布局id
问:R.id.xxx值是int吗
答:是的,而且R.drawable.xxx也是int型数据

②root是碎片布局将插入到的活动的 ViewGroup

③attachToRoot表示是否在创建碎片期间,把碎片布局附加到ViewGroup上,在碎片这里,系统已经把碎片布局插入到ViewGroup中了(在fragment标签与transaction.add(R.id.xx,Fragment)吗?),所以值为false,如果为true会导致程序崩溃,报错:
The specified child already has a parent. You must call removeView() on the child’s parent first.。

问:那返回的View是什么呢?

根据addView(),觉得是加载的布局视图

看了郭霖大神的博客,inflate会将加载的布局解析成一个View DOM树,最顶层的View即为根视图,也就是返回的View,一般就是最外层的布局


一个问题:

若碎片已保存到返回栈,进入到另一个碎片,调用onDestroyView,再返回到碎片,发现没调用onCreateView,不符合生命周期


4、添加碎片的两种方式:

①<fragment>标签

<fragment>中的 android:name 属性指定要在布局中实例化的 Fragment 类。
当系统创建此 Activity 布局时,会实例化在布局中指定的每个片段,并为每个片段调用 onCreateView() 方法,以检索每个片段的布局。系统会直接插入片段返回的 View 来替代 <fragment> 元素。

②通过编程方式将片段添加到某个现有 ViewGroup
您可以在 Activity 运行期间随时将片段添加到 Activity 布局中。您只需指定要将片段放入哪个 ViewGroup。(可以不是FrameLayout吗?试了一下LinearLayout发现可以)


5、碎片与活动通信

在这里写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值