Fragment的简介及使用笔记

来源:互联网 发布:白苹果的数据能恢复吗 编辑:程序博客网 时间:2024/06/06 04:26

详参 http://blog.csdn.net/lmj623565791/article/details/37970961

1、Fragment可以作为Activity的一个组成部分且必须依赖于Activity存在,拥有自己的生命周期。

2、Activity与Fragment的生命周期关系如下图所示

这里写图片描述

3、Fragment的静态使用:

①写一个Fragment对应的layout(例中名为main_fragment1)

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="fragment要展示的内容"        android:textSize="20sp" /></LinearLayout>

②在Fragment的class文件(例中名为MainFragment1)中继承Fragment,重写onCreateView,选定对应布局文件

public class MainFragment1 extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.main_fragment1, container, false);        return view;    }}

③将此fragment作为一种控件,放入需要展示的Activity对应的layout中

<fragment        android:id="@+id/id_main_fragment"        android:layout_width="match_parent"        android:name="com.example.a11964.myclock.MainFragment1"        android:layout_height="0dp"        android:layout_weight="1" />

4、Fragment的动态使用
先如法炮制上面静态Fragment的使用,创建若干个要用到的Fragment及其对应的layout,然后在想要使用动态Fragment的地方放置一个FrameLayout用来存放Fragment

activity_main.xml中

<FrameLayout        android:id="@+id/id_main_frameLayout"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1" />

MainActivity中

    @Override    public void onClick(View view) {        FragmentManager fm = getFragmentManager();        FragmentTransaction ft = fm.beginTransaction();        switch (view.getId()) {            case R.id.id_main_imgBtn1:                if (fragment1 == null) {                    fragment1 = new MainFragment1();                }                                        //(被替换项,替换项)                ft.replace(R.id.id_main_frameLayout, fragment1);                break;            case R.id.id_main_imgBtn2:                if (fragment2 == null) {                    fragment2 = new MainFragment2();                }                ft.replace(R.id.id_main_frameLayout, fragment2);                break;        }        // 事务提交        ft.commit();    }

如上所示,我们需要做的就是给按钮设置关联的Fragment,这样就完成了基本的replace方法。其余方法(add,remove,hide,show等)类似就不一一列举,详见置顶blog。

以下详参:http://blog.csdn.net/lmj623565791/article/details/37992017

5、Fragment中回退栈的使用

6、Fragment与Activity之间的通信
字太多不想打,= = 照搬一段:
因为所有的Fragment都是依附于Activity的,所以通信起来并不复杂,大概归纳为:

a、如果你Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法
b、如果Activity中未保存任何Fragment的引用,那么没关系,每个Fragment都有一个唯一的TAG或者ID,可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作。
c、在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。

注:如果在Fragment中需要Context,可以通过调用getActivity(),如果该Context需要在Activity被销毁后还存在,则使用getActivity().getApplicationContext()。

未完待续…

原创粉丝点击