深入浅析 Android Fragment(上篇)

yizhihongxing

深入浅析 Android Fragment(上篇)

何谓Fragment

Fragment是Android中一种独立模块的组件,其类似于Activity,可以包含UI界面和交互逻辑,但与Activity不同的是,Fragment是不能单独存在的,它必须依附于Activity才能存在。

Fragment的生命周期

Fragment的生命周期是指Fragment在其创建、运行、销毁的过程中,系统会调用的一组回调函数。Fragment的生命周期包括以下方法:

  • onAttach() : 当Fragment与Activity发生关联时调用;
  • onCreateView() : 当Fragment的布局需要被实例化时调用;
  • onViewCreated() : 当Fragment的布局被实例化并且与Fragment发生关联时调用;
  • onActivityCreated() : 当Fragment所在的Activity被启动完成后调用;
  • onStart() : 当Fragment被启动时调用;
  • onResume() : 当Fragment被恢复时调用;
  • onPause() : 当Fragment被暂停时调用;
  • onStop() : 当Fragment被停止时调用;
  • onDestroyView() : 当Fragment的视图被移除时调用;
  • onDestroy() : 当Fragment被销毁时调用;
  • onDetach() : 当Fragment与Activity的连接被断开时调用。

Fragment的使用方式

在Activity中引入Fragment,可以通过以下三种方式:

静态添加

静态添加是通过在布局文件中直接声明<fragment>标签,将Fragment组件和Activity进行绑定。在Activity启动时,Fragment也会一起被实例化。

示例代码:

<fragment
    android:id="@+id/fragment_main"
    android:name="com.example.FragmentMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

动态添加

动态添加是在Activity运行时,通过代码添加Fragment组件,在需要的时候将Fragment添加到Activity中。动态添加的好处在于可以在逻辑处理的过程中动态切换和添加Fragment。

示例代码:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
FragmentMain fragmentMain = new FragmentMain();
transaction.add(R.id.fragment_container, fragmentMain);
transaction.commit();

动态替换

动态替换是将已经添加到Activity中的Fragment替换成其他的Fragment,可以用于在不同的页面间进行快速切换。

示例代码:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
FragmentTransaction.replace(R.id.fragment_container, new FragmentSub());
transaction.commit();

Fragment的通信方式

  • 直接调用:在一个Fragment中直接调用其他Fragment的公共方法实现通信;
  • Activity作为中介:通过Activity来实现Fragment之间的通信;
  • 使用接口回调:让一个Fragment实现一个接口,然后让另一个Fragment在其内部持有该接口的实例,在适当的时候调用该实例的方法完成回调。

示例代码:

// FragmentMain中定义一个接口
public interface OnButtonClick {
    void onButtonClick(String string);
}

// FragmentSub中持有该接口的实例,并在需要时调用其方法
private OnButtonClick onButtonClick;
public void setOnButtonClick(OnButtonClick onButtonClick) {
    this.onButtonClick = onButtonClick;
}
onButtonClick.onButtonClick("Hello, world!");

// Activity中作为中介,实现OnButtonClick接口,并将实例传递给Fragment
FragmentMain fragmentMain = new FragmentMain();
fragmentMain.setOnButtonClick(new OnButtonClick() {
    @Override
    public void onButtonClick(String string) {
        Log.d(TAG, string);
    }
});
FragmentTransaction.replace(R.id.fragment_container, fragmentMain);

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入浅析 Android Fragment(上篇) - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 基于Android实现数独游戏

    基于Android实现数独游戏攻略 1. 简介 数独是一种经典的逻辑推理游戏,通过填写数字到9×9的网格中,使得每一行、每一列和每一个3×3的子网格中的数字都不重复。本攻略将详细介绍如何基于Android平台实现一个数独游戏。 2. 开发环境准备 在开始之前,确保你已经安装了以下开发环境:- Android Studio:用于开发Android应用程序的集成…

    other 2023年9月7日
    00
  • R语言批量读取某路径下文件内容的方法

    读取某路径下的多个文件内容是数据分析中经常需要处理的问题,R语言提供了多种方式来实现这个目标,以下是一种标准的方法: 1. 获取文件列表 首先,我们需要获取某个路径下的所有文件名,可以使用 list.files() 函数来实现: dir_path <- "C:/my_folder" files <- list.files(di…

    other 2023年6月27日
    00
  • 基于jquery的loading 加载提示效果实现代码

    下面我会详细讲解“基于jquery的loading 加载提示效果实现代码”的完整攻略。 1. 确定需求和实现方式 首先我们需要明确需求和实现方式。这里我们需要实现一个加载提示效果,即在用户进行某些操作时显示一个提示框,让用户知道当前页面正在加载数据。我们可以通过使用jquery来实现这个功能。 2. 编写HTML代码 加载提示效果需要在页面中插入HTML代码…

    other 2023年6月25日
    00
  • ES6 class类实现继承实例详解

    ES6 class类实现继承实例详解 在JavaScript中,类继承是一种基本的面向对象编程技巧。ES6引入了类和继承机制,使得JavaScript编写类和继承的方式更加直观和简单。 ES6类声明 ES6类通过class关键字声明,在类中定义一个构造函数,使用new关键字来实例化: class Animal { constructor(name, age)…

    other 2023年6月26日
    00
  • Java获取电脑真实IP地址的示例代码

    获取电脑真实IP地址是Java编程中的一个常见需求。下面是一个完整的攻略,包含了两个示例说明。 示例1:使用InetAddress类获取本机IP地址 import java.net.InetAddress; import java.net.UnknownHostException; public class GetIPAddressExample { pub…

    other 2023年7月30日
    00
  • 一文教你如何封装安全的go

    下面我将详细讲解“一文教你如何封装安全的go”的完整攻略。 1. 封装安全的Go的必要性 在Go语言的设计中,有一条重要原则是封装,即尽可能隐藏具体实现细节,对外提供简洁易用的API,同时保证安全性。这是因为,在Go语言中,没有公有、私有之分,所有的变量和方法都是公有的。因此,如果不采取一定的封装措施,那么我们的代码就可能会被滥用或者攻击。 封装安全的Go代…

    other 2023年6月25日
    00
  • Windows 2008 服务器安全加固几个注意事项

    Windows 2008 服务器安全加固注意事项 随着互联网的发展,服务器安全问题已经越来越引起人们的关注。为了提高服务器的安全性,我们需要对 Windows 2008 服务器进行加固。以下是一些注意事项: 1. 安装最新的安全更新补丁 安全更新补丁可以修复操作系统的安全漏洞,提高系统的安全性。我们可以通过访问 Microsoft Update 来获取最新的…

    other 2023年6月27日
    00
  • mac下jenkins安装步骤

    Mac下Jenkins安装步骤 Jenkins是一个流行的开源持续集成和持续交付工具,它可以帮助开发人员自动化构建、测试和部署软件。在本攻中,我们将介绍如在Mac上安装Jenkins。 步一:安装Java Jenkins是基于Java开发的,因此安装Jenkins之前,我们需要先安装Java。以下是安装Java的步骤: 打开终端应用程序。 2.行命令来安Ja…

    other 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部