内容简介:Fragment 和 activity 一样,也是有四种状态Resumed当前 Fragment 位于前台,用户可见,可以获得焦点;Paused另一个 Activity 处于前台并拥有焦点, 但是该 Fragment 所在的 Activity 仍然可见(前台 Activity 局部透明或者没有覆盖整个屏幕),不过不能获得焦点;
Fragment 和 activity 一样,也是有四种状态
Resumed当前 Fragment 位于前台,用户可见,可以获得焦点;
Paused另一个 Activity 处于前台并拥有焦点, 但是该 Fragment 所在的 Activity 仍然可见(前台 Activity 局部透明或者没有覆盖整个屏幕),不过不能获得焦点;
Stopped要么是宿主 Activity 已经被停止, 要么是 Fragment 从 Activity 被移除但被添加到回退栈中;停止状态的 Fragment 仍然活着(所有状态和成员信息被系统保持着)。 然而, 它对用户不再可见, 并且如果 Activity 被销毁,它也会被销毁;
Destroyed只能等待被回收。
附上 Activity 生命周期进行对比
Fragment 比 Activity 多了几个额外的生命周期回调方法:
onAttach() 当碎片和活动建立关联时调用。(获得 activity 的传递的值) onCreateView() 为碎片创建视图调用就是加载布局时。 onActivityCreated() 确保与碎片相关联的活动一定已经创建完毕的时候调用。 onDestroyView() 当与碎片的视图被移除的时候调用。 onDetach()当碎片与活动解除关联的时候调用。
简单使用
Fragment 添加到 Activity 中有两种方式一种是静态添加,一种是动态添加
静态添加
在对应的 Activity 中的 xml 中添加,实例如下
<fragment android:id="@+id/a_fragment" android:name="com.madreain.AFragment" android:layout_width="match_parent" android:layout_height="match_parent"> </fragment> 复制代码
动态添加
一般都是把 xml 布局中的 FrameLayout 作为 Fragment 显示的区域,然后通过 tab 栏按钮来进行多个 Fragment 的切换
有两篇文章很好的讲解了Fragment使用中遇到的问题
FragmentTransaction有一些基本方法,下面给出调用这些方法时,Fragment生命周期的变化:
add(): onAttach()->…->onResume()。 remove(): onPause()->…->onDetach()。 replace(): 相当于旧Fragment调用remove(),新Fragment调用add()。 show(): 不调用任何生命周期方法,调用该方法的前提是要显示的 Fragment已经被添加到容器,只是纯粹把Fragment UI的setVisibility为true。 hide(): 不调用任何生命周期方法,调用该方法的前提是要显示的Fragment已经被添加到容器,只是纯粹把Fragment UI的setVisibility为false。 detach(): onPause()->onStop()->onDestroyView()。UI从布局中移除,但是仍然被FragmentManager管理。 attach(): onCreateView()->onStart()->onResume()。
Fragment 通信
1.Fragment向Activity传递数据 1).接口回掉的方法 Fragment中定义接口,Activity中实现该接口。
AFragment
public interface OnFragmentCallback { void onCallback(Object value); } 复制代码
AActivity
public class AActivity extends AppCompatActivity implements AFragment.OnFragmentCallback{ @Override public void onCallback(Object value){ //todo获取Fragment 向 Activity传递的数据 } } 复制代码
2).广播方式
广播具体实现参考BroadcastReciver详解
2.Activity 向 Fragment 传递数据(Bundle 和 setArguments(bundle))
1).Fragment创建时传递数据
在AActivity调用时
AFragment aFragment = AFragment.newInstance(object); aFragment.setStyle(DialogFragment.STYLE_NO_TITLE, 0); aFragment.show(getSupportFragmentManager(), AFragment.class.getName()); 复制代码
在AFragment中
public class AFragment extends DialogFragment { private Object object; /** * 创建时传入的对象,可传入多个参数 */ public static AFragment newInstance(Object object) { AFragment fragment = new AFragment(); Bundle bundle = new Bundle(); bundle.putBoolean("object", object); fragment.setArguments(bundle); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //省略其他代码 Bundle bundle = getArguments(); //获取到传入的值进行显示等使用 object = bundle.getString("object"); return v; } } 复制代码
2).Fragment创建后设置数据
在AFragment中
public class AFragment extends DialogFragment { private Object object; public void setObject(Object object) { this.object = object; } } 复制代码
在AActivity中设置值
afragment.setObject("object") 复制代码
3).广播方式同上
3.Fragment之间通信
1).通过Activity作为中介,参考Fragment->Activity传递参数,然后ctivity->Fragment传递参数
2).广播方式同上
以上所述就是小编给大家介绍的《Fragment 详解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Flutter 完整开发实战详解(十六、详解自定义布局实战)
- 数据结构 1 线性表详解 链表、 栈 、 队列 结合JAVA 详解
- 详解Openstack环境准备
- Java泛型详解
- iOS RunLoop 详解
- Raft协议详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
iOS应用逆向工程 第2版
沙梓社、吴航 / 机械工业出版社 / 2015-4-1 / 79.00
你是否曾因应用上线的第一天即遭破解而无奈苦恼,想要加以防范,却又束手无策? 你是否曾为某一应用深深折服,想要借鉴学习,却又无从下手? 你是否已不满足于public API,想要进军Cydia开发,却又求学无门? 你是否已产生“不识Apple真面目,只缘身在App Store中”的危机感,想要通过阅读来一窥这冰山一角外的整个北极,却又找不到合适的书? 你是否已经因无法跨越开发......一起来看看 《iOS应用逆向工程 第2版》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
Base64 编码/解码
Base64 编码/解码