Fragment 学习理解 - litonghui/TechBlog GitHub Wiki

Fragment

Activity 必须继承自FragmentActivity,使用getSupportFragment() 方法获取 FragmentManager 对象

Fragment 调用方式:

1.创建实例
  OneFragment oneFragment = new OneFragment();
  Bundle bundle = new Bundle();
  bundle.putInt("someArgs", args);
  oneFragment.setArguments(bundle);
2. 嵌入方式,借助管理器类FragmentManager 和 事务类 FragmentTransaction 提供的replace() 方法替换 Activity 的layout中相应的容器布局。
 FragmentManager fm = getFragmentManager();
 FragmentTransaction ft = fm.beginTransaction();
 ft.replace(R.id.fl_content, OneFragment.newInstance());
 ft.commit() 

getChildFragmentManager

Activity 嵌套多级Fragment管理子Fragment时需要FramentManager 需要通过 getChildFragmentManager() 方法来获取对象。

FragmentTransaction

动态add(),remove(),replace(),hide(),(),commit()改动之后的确认 addToBackStack() 添加当前事物到回退栈中,返回键触发,界面回归到当前事物状态

BackStack 回退栈

getActivity() 引用问题

1. Activity 实例销毁需要添加空值等判断fragment.isAdd(),getActivity()!=null
2. 内存泄露问题,fragment 持有activity 不被销毁。
解决方法:getContext() 返回上下文或者在onattach() 方法中获取context。

Fragment 之间通信

Android 开发中常见的通信方式:1,通过Handler进行Message通信; 2,注册广播接收消息 3,EventBus 4, 接口回调等,分析这几种通信方式handle 单向通信,使用不恰当容易造成内存泄露,广播代码简单但是需要消耗CPU和电源资源,EventBus 底层实现是反射实现,性能不优,接口回调需要整体封装,否则接口太多。推荐使用接口回调方式,具体参考,基于android fragment通信的面向对象的万能接口