Android中的Fragment

Fragment 表示 Activity 中的行为或用户界面部分。您可以将多个片段组合在一个 Activity 中来构建多窗格 UI,以及在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段

片段必须始终嵌入在 Activity 中,其生命周期直接受宿主 Activity 生命周期的影响。 例如,当 Activity 暂停时,其中的所有片段也会暂停;当 Activity 被销毁时,所有片段也会被销毁。 不过,当 Activity 正在运行(处于已恢复生命周期状态)时,您可以独立操纵每个片段,如添加或移除它们。 当您执行此类片段事务时,您也可以将其添加到由 Activity 管理的返回栈 — Activity 中的每个返回栈条目都是一条已发生片段事务的记录。 返回栈让用户可以通过按返回按钮撤消片段事务(后退)。

一、生命周期
这里写图片描述

这里写代码片

二、编写Fragment

@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_store, container, false);
    }

三、从布局文件生成一个Fragment

 <!--父布局的id必须有-->
        <RelativeLayout
            android:id="@+id/store_container2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="10dp"
            android:background="#cccccc">
            <!--id若没有采用父布局的,name为类名-->
            <fragment
                android:id="@id/store_container2"
                android:tag="store_container2"
                android:name="com.netease.study.ui.fragment.StoreFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                tools:layout="@layout/fragment_store">
            </fragment>

        </RelativeLayout>
注:每个片段都需要一个唯一的标识符,重启 Activity 时,系统可以使用该标识符来恢复片段(您也可以使用该标识符来捕获片段以执行某些事务,如将其移除)。 可以通过三种方式为片段提供 ID:
为 android:id 属性提供唯一 ID。
为 android:tag 属性提供唯一字符串。
如果您未给以上两个属性提供值,系统会使用容器视图的 ID

四、动态生成一个Fragment

        // new
        Fragment fragment = new StoreFragment();
        // 获取Fragment Manager
        FragmentManager fragmentManager = getFragmentManager();
        // 开始一个事务
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 事务包含的操作
        fragmentTransaction.add(containerId, fragment); // 添加一个Fragment
        fragmentTransaction.commit(); // 提交事务

五、参数的传递

        // 参数
        Bundle args = new Bundle();
        args.putString("name", "store with name");
        // new
        Fragment fragment = new StoreFragmentWithArg();
        // 设置参数
        fragment.setArguments(args);
        // 获取Fragment Manager
        FragmentManager fragmentManager = getFragmentManager();
        // 开始一个事务
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 事务包含的操作
        fragmentTransaction.add(R.id.store_container, fragment); // 添加一个Fragment
        fragmentTransaction.commit(); // 提交事务
        // 获取参数,获取名字
        Bundle args = getArguments();
        name = args != null ? args.getString("name") : null;

六、Fragment Manager

// 开始一个事务
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// 事务包含的操作
fragmentTransaction.replace(R.id.store_container1, fragmentToReplace, "replace"); // 替代一个Fragment
fragmentTransaction.add(R.id.store_container2, fragmentToAdd, "add2"); // 添加一个Fragment
        fragmentTransaction.addToBackStack(null); // 添加进栈
        fragmentTransaction.commit(); // 提交事务

七、与Activity交互
定义一个接口
在Activity实现这个接口
在Fragment的onAttache方法里接受数据

相关资料:https://developer.android.com/guide/components/fragments.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值