Fragment
-
Fragment是区域性UI
Android的界面通常是Activity实现,但有时需要把一个单独的Activity分割为一个多区域的UI,这时候就用到了Fragment,一个Activity可以在每一个区域嵌套一个Fragment;
-
Fragment有自己的生命周期
可以处理自己的输入事件,并可以在Activity运行时动态添加或删除Fragment。
重要生命周期阶段:
onAttach(Activity):当Fragment第一次与Activity产生关联时调用,以后不在调用。
onCreate():当onAttach()执行完后会立刻调用此方法通常被用于读取保存的状态值,获取或初始化一些数据,但是该方法不执行,窗口是不会显现的,因此如果获取的数据需要访问网络,最好新开线程。
onCreateView(LayoutInflater,ViewGroup,Bundle):创建Fragment中显示的view,初始化加载布局文件(通过打气筒 详情见打气筒篇章)。
onActivityCreated(Bundle):在Activity.onCreate()方法调用后会立刻调用此方法,表示窗口已经初始化完毕,此时可以开始调用控件了。
-
Fragment不能独立存在
Fragment必须嵌入到Activity中,而且Fragment的生命周期直接受到所在Activity的影响。
Fragment必须部署于Activity的视图的ViewGroup里面,同时,Fragment必须定义自己的布局文件(fragment01.xml)
-
Fragment基本用法步骤
第一步:创建Fragment
- 为Fragment创建layout布局文件 fragment01.xml
- 新建一个继承于Fragment的子类,并通过onCreateView()方法加载布局文件。
public class Fragment01 extends Fragment{
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState){
//打气筒原理
//inflater用来装载布局文件,container表示ViewGroup对象,savedInstanceState获取保存的状态
return inflater.inflate(R.layout.fragment01,container,flase);
}
}
第二步:添加Fragment到Activity(两种方法)
- 在Activity布局文件中直接声明Fragment(静态添加)
<LinearLayout > <fragment android:id="@+id/fragment01" android:name="com.wqt.fragmentTest.Fragment01" android:width="wrap_content" android:height="match_parent" /> <fragment android:name="com.wqt.fragmentTest.Fragment02" /> </LinearLayout>
- 在java代码中添加Fragment到Activity的一个ViewGroup里(动态添加)
①提前在Activity的布局文件main.xml中设置好ViewGroup容器
<LinearLayout
>
<LinearLauout
android:id="@+id/linear"
/>
</LinearLayout>
②在java代码中动态添加(获取FragmentManager,beginTransaction开启事务,通过replace方法向容器加入,最后提交事务)
FragmentManager fm = getFragment();
FragmentTracsaction ft = fm.beginTransaction(); //开始事务
Fragment01 fragment01 = new Fragment01();
ft.replace(R.id.linear,fragment01); //ViewGroup的id,Fragment的实例
ft.commit(); //提交事务
-
Fragment之间的通信
通过getActivity这个方法实现fragment之间的通信。
getActivity方法可以让Fragment获取关联的Activity,然后再调用Activity的findViewById方法,就可以获取到与这个Activity关联的其他Fragment的视图了。