Activity之Fragment详解和回退

目录

 

1.Fragment是什么?

2.Fragment的生命周期?

3.Fragment添加方式?

3.1在 Activity 的布局文件内声明片段

3.2通过编程方式将片段添加到某个现有 ViewGroup

4.编程方式动态添加,替换或者修改Fragment

5.实现Fragment回退

5.1定义Fragment返回监听接口,Fragment需要实现此接口

5.2定义BackHandlerHelper帮助类,进行返回事件分发,用于实现Fragment和FragmentActivity返回操作,主要实现将FragmentActivity监听到的返回事件进行分发给Fragment

5.3定义Fragment基类,其他需要监听返回事件类需要继承BackHandledFragment基类

5.4FragmentActivity调用工具方法BackHandlerHelper.handleBackPress(this),将返回事件进行分发

6.Fragment之间的数据交换

6.1Fragment通知数据给Activity

6.2将消息传递给Activity


1.Fragment是什么?

Fragment相当于FragmentActivity界面的一部分,Fragment生命周期直接受宿主 Activity 生命周期的影响;Activity会维护Fragment返回栈,方便通过返回按钮关闭当前显示的Fragment进行回退;您可以通过在 Activity 的布局文件中声明片段,将其作为 <fragment> 元素插入您的 Activity 布局,或者通过将其添加到某个现有的 ViewGroup,利用应用代码将其插入布局;

Fragment 表示 FragmentActivity 中的行为或界面的一部分。您可以在一个 Activity 中组合多个片段,从而构建多窗格界面,并在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(这有点像可以在不同 Activity 中重复使用的“子 Activity”)。

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

当您将片段作为 Activity 布局的一部分添加时,其位于 Activity 视图层次结构的某个 ViewGroup 中,并且片段会定义其自己的视图布局。您可以通过在 Activity 的布局文件中声明片段,将其作为 <fragment> 元素插入您的 Activity 布局,或者通过将其添加到某个现有的 ViewGroup,利用应用代码将其插入布局。

2.Fragment的生命周期?

3.Fragment添加方式?

3.1在 Activity 的布局文件内声明片段

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment android:name="com.example.news.ArticleListFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment android:name="com.example.news.ArticleReaderFragment"
            android:id="@+id/viewer"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>

3.2通过编程方式将片段添加到某个现有 ViewGroup

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

4.编程方式动态添加,替换或者修改Fragment

//1.创建一个Fragment和transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

//2.添加添加add(),替换replace()Fragment到指定ViewGroup上,或者移除remove()Fragment
transaction.replace(R.id.fragment_container,
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值