Android Fragment 基本了解(图文介绍)

Android Fragment 基本了解(图文介绍)

什么是 Fragment?

Fragment 是一种 UI 组件,可以像 Activity 一样具有用户界面,并且可以在 Activity 中组合使用多个 Fragment 以构建复杂的用户界面。

Fragment 的使用场景

Fragment 的使用场景主要涉及以下几种情况:

  • 在大屏幕设备(比如平板电脑)上展示多个 UI 组件。
  • 在一些场景下,多个 Activity 需要展示相似或相同的 UI 组件。
  • 当需要动态添加、移除或替换 UI 组件时,使用 Fragment 可以更为轻松地实现。

Fragment 的使用方法

1. 创建 Fragment

class MyFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, 
        container: ViewGroup?, 
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_my, container, false)
    }
}

2. 在 Activity 中添加并展示 Fragment

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 创建 Fragment 实例
        val myFragment = MyFragment()

        // 在 Activity 中添加 Fragment
        supportFragmentManager.beginTransaction()
            .add(R.id.fragment_container, myFragment)
            .commit()
    }
}

以上代码中,我们在 MainActivity 中添加了一个 Fragment,并指定了它的 UI 组件布局。

在 Activity 的布局文件中,我们需要创建一个 FrameLayout 容器,来承载 Fragment 的 UI 组件。

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

3. Fragment 生命周期

Fragment 的生命周期与 Activity 类似,包含多个状态,开发者可以在不同的状态下实现不同的动作和功能。以下为 Fragment 的生命周期:

  • onAttach(): 当 Fragment 被绑定到 Activity 时调用。
  • onCreate(): 在 Fragment 创建时调用。
  • onCreateView(): 当 Fragment 的 UI 组件被创建时调用。
  • onStart(): 在 Fragment 变为可见时调用。
  • onResume(): 在 Fragment 处于活动状态时调用。
  • onPause(): 当 Fragment 将要暂停或停止时调用。
  • onStop(): 当 Fragment 不再可见时调用。
  • onDestroyView(): 当 Fragment 的视图被销毁时调用。
  • onDestroy(): 当 Fragment 被销毁时调用。
  • onDetach(): 当 Fragment 与 Activity 解绑时调用。

示例说明

示例一:添加两个 Fragment

在一个 Activity 中添加两个 Fragment,实现简单的信息展示功能。具体操作如下:

  1. 创建两个 Fragment,一个用于展示用户信息,一个用于展示系统信息。

  2. 在 Activity 中添加两个 Fragment 并展示它们:

class MainActivity : AppCompatActivity() {
    private val userInfoFragment = UserInfoFragment()
    private val systemInfoFragment = SystemInfoFragment()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 添加两个 Fragment 到 Activity 中
        supportFragmentManager.beginTransaction()
            .add(R.id.fragment_container, userInfoFragment)
            .add(R.id.fragment_container, systemInfoFragment)
            .commit()

        // 初始时显示用户信息 Fragment
        supportFragmentManager.beginTransaction()
            .hide(systemInfoFragment)
            .show(userInfoFragment)
            .commit()
    }
}
  1. 在布局文件中添加两个 FrameLayout 容器,分别用于展示用户信息和系统信息:
<FrameLayout
    android:id="@+id/user_info_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

<FrameLayout
    android:id="@+id/system_info_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
  1. 在各自的 Fragment 中实现 UI 组件的布局和数据填充等操作。示例代码如下:
class UserInfoFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, 
        container: ViewGroup?, 
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_user_info, container, false)

        // 填充用户信息到 UI 组件
        view.findViewById<TextView>(R.id.tv_name).text = "张三"
        view.findViewById<TextView>(R.id.tv_age).text = "28"
        view.findViewById<TextView>(R.id.tv_gender).text = "男"

        return view
    }
}

class SystemInfoFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, 
        container: ViewGroup?, 
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_system_info, container, false)

        // 填充系统信息到 UI 组件
        view.findViewById<TextView>(R.id.tv_os_version).text = "Android 11.0"
        view.findViewById<TextView>(R.id.tv_device_type).text = "Pixel 4"
        view.findViewById<TextView>(R.id.tv_storage).text = "64GB"

        return view
    }
}

示例二:替换 Fragment

在一个 Activity 中使用一个按钮,在用户点击按钮时替换当前展示的 Fragment。具体操作如下:

  1. 创建两个 Fragment,一个用于展示用户信息,一个用于展示系统信息。

  2. 在 Activity 中添加一个 FrameLayout 容器,并默认展示用户信息 Fragment:

class MainActivity : AppCompatActivity() {
    private val userInfoFragment = UserInfoFragment()
    private val systemInfoFragment = SystemInfoFragment()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 添加初始的 Fragment 到 Activity 中
        supportFragmentManager.beginTransaction()
            .add(R.id.fragment_container, userInfoFragment)
            .commit()
    }
}
<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
  1. 在布局文件中添加一个按钮,用于替换当前展示的 Fragment:
<Button
    android:id="@+id/btn_switch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Switch Fragment"
    />
  1. 在 Activity 中实现点击按钮时替换 Fragment 的功能:
class MainActivity : AppCompatActivity() {
    // 省略之前的代码

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 添加初始的 Fragment 到 Activity 中
        supportFragmentManager.beginTransaction()
            .add(R.id.fragment_container, userInfoFragment)
            .commit()

        // 设置按钮点击事件监听器
        findViewById<Button>(R.id.btn_switch).setOnClickListener {
            switchFragment()
        }
    }

    private fun switchFragment() {
        val transaction = supportFragmentManager.beginTransaction()

        // 判断当前展示的 Fragment 是否为用户信息 Fragment
        if (userInfoFragment.isVisible) {
            // 如果是,则替换为系统信息 Fragment
            transaction.replace(R.id.fragment_container, systemInfoFragment)
        } else {
            // 如果不是,则替换为用户信息 Fragment
            transaction.replace(R.id.fragment_container, userInfoFragment)
        }

        transaction.commit()
    }
}
  1. 在各自的 Fragment 中实现 UI 组件的布局和数据填充等操作。示例代码同样与之前的示例相同,此处不再赘述。

以上便是 Fragment 基本使用方法及示例说明,希望能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android Fragment 基本了解(图文介绍) - Python技术站

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

相关文章

  • javascript如何用递归写一个简单的树形结构示例

    如何用递归写一个简单的树形结构示例? 首先需要定义树节点的结构,例如: class Node { constructor(name, children) { this.name = name; this.children = children || []; } } 其中 name 属性表示节点名称,children 表示子节点。如果这个节点没有子节点,chi…

    other 2023年6月27日
    00
  • 最全面的Android Studio使用教程(图文)

    很抱歉,作为一个文本模型,我无法提供完整的图文教程。然而,我可以为您提供一些关于Android Studio使用的基本指导和示例说明。请注意,以下内容是以纯文本形式提供的,没有图像或图文。 Android Studio使用教程 1. 安装Android Studio 首先,您需要下载并安装Android Studio。您可以从官方网站上下载适用于您的操作系统…

    other 2023年7月27日
    00
  • weblogic迁移总结

    WebLogic迁移总结的完整攻略 WebLogic是一种常见的Java应用服务器,用于部署和运行Java应用程序。在某些情况下,您可能需要将WebLogic迁移到新的环境,例如新的硬件、操作系统或云平台。本文将为您提供WebLogic迁移的完整攻略,包括以下步骤: 确定迁移的目标环境 准备迁移环境 备份WebLogic配置和数据 迁移WebLogic应用程…

    other 2023年5月6日
    00
  • vue axios封装及API统一管理的方法

    下面介绍一下“Vue axios封装及API统一管理的方法”的完整攻略。 一、为什么需要封装及统一管理API 在Vue项目中使用axios发送HTTP请求是非常常见的,而每次发送请求时,都需要编写一大堆繁琐的代码,例如设置请求头、处理错误、在请求完成后进行数据处理等等。 同时,在一个大型项目中,可能会存在多个人协作开发,每个人都有可能编写自己的API请求函数…

    other 2023年6月25日
    00
  • CMD命令详解 目录类命令(md、cd、rd、dir、path、tree、deltree)

    CMD命令详解 目录类命令(md、cd、rd、dir、path、tree、deltree) 在Windows的命令提示符中,目录类命令可用于创建、进入、删除和显示目录和文件信息。本文将对目录类命令进行详细说明。 md md 命令用于创建一个目录。其语法如下: md 目录名 例如,要在C盘上创建一个名为“test”的目录: md C:\test cd cd 命…

    other 2023年6月26日
    00
  • Linux 4.0 不再需要重启

    针对“Linux 4.0 不再需要重启”的完整攻略,我为您准备了以下内容: Linux 4.0 不再需要重启攻略 简介 在Linux系统中,更新部分内核版本需要重启系统,这对于一些需要长时间运行的系统来说是非常不方便的,但在 Linux 4.0 版本后,引入了一种“热补丁”技术,可以做到在不重启系统的情况下更新部分内核版本,从而大大提高系统的稳定性和可靠性。…

    other 2023年6月27日
    00
  • ubuntu如何搭建vsftpd服务器

    Ubuntu搭建vsftpd服务器攻略 1. 安装vsftpd 首先,我们需要在Ubuntu上安装vsftpd软件包。打开终端并执行以下命令: sudo apt update sudo apt install vsftpd 2. 配置vsftpd 2.1 修改配置文件 打开vsftpd的配置文件/etc/vsftpd.conf,可以使用任何文本编辑器进行编辑…

    other 2023年8月3日
    00
  • word2003自定义文件属性的方法

    当我们使用Microsoft Word 2003创建文档时,有时需要向文档添加一些自定义信息,如作者、标题、主题等,这些信息被称为文件属性。在本篇文章中,我们将介绍如何使用Word 2003的自定义文件属性功能。 步骤一:打开Word文档 首先,我们需要打开一个Word文档。打开文档后,单击工具栏中的“文件”选项,然后单击下拉菜单中的“属性”选项。 步骤二:…

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