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

yizhihongxing

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日

相关文章

  • pytest接口自动化测试框架搭建的全过程

    很抱歉,作为文本模型,我无法以标准的markdown格式回答您的问题。但是,我可以为您提供一份详细的攻略,包含pytest接口自动化测试框架搭建的全过程,并提供两个示例说明。 pytest接口自动化测试框架搭建的全过程 步骤1:安装pytest和相关依赖 首先,确保您已经安装了Python和pip。然后,使用以下命令安装pytest和相关依赖: pip in…

    other 2023年10月17日
    00
  • 通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle跨库传输数据的方法(推荐)

    通过PL/SQL Developer创建Database Link, DBMS_Job, Procedure实现Oracle跨库传输数据的方法 以下是使用PL/SQL Developer创建Database Link, DBMS_Job, Procedure实现Oracle跨库传输数据的完整攻略: 创建Database Link: 在PL/SQL Devel…

    other 2023年10月18日
    00
  • ascii与hex对照转换表

    当然,我可以为您提供有关“ASCII与Hex对照转换表”的完整攻略,以下是详细说明: ASCII与Hex对照转换表 ASCII码是一用于表示字符的标准编码系统,它将每个字符映射到一个唯一的数字值。Hex(十六进制)是一种数值系统,它使用16个数字(0-9和A-F)数字和字符。在计算机科学中,Hex常用于表示二进制数据,因为它比二进制更易于阅读和理解。以下是A…

    other 2023年5月7日
    00
  • mysql数据库优化原则

    Mysql数据库优化原则 MySQL作为一款流行的关系型数据库管理系统,被广泛应用于各种类型的Web应用程序中。在许多情况下,数据库是整个Web应用程序中最耗费资源的组件,因此对于优化MySQL数据库的需求很高。本文将介绍一些MySQL数据库优化的原则,帮助您提高Web应用程序的性能并降低成本。 原则一:正确选择数据类型 在MySQL中,您需要正确选择数据类…

    其他 2023年3月28日
    00
  • C#书写规范

    C#书写规范攻略 1. 命名规范 1.1 类和接口命名 类名和接口名应该使用帕斯卡命名法(PascalCase),即每个单词的首字母大写,不使用下划线或连字符。 类名应该是名词或名词短语,描述类的职责和功能。 接口名应该以\”I\”开头,后面跟随描述接口职责和功能的名词或名词短语。 示例: public class UserService { // 类的实现…

    other 2023年8月19日
    00
  • DevOps自动化组件RUNDECK开发部署使用说明

    DevOps自动化组件RUNDECK开发部署使用说明 什么是RUNDECK? RUNDECK是一款自动化工具,可以用于在数据中心或云环境中自动化各种日常任务和操作。它提供了一个中心化的控制面板,可以管理和控制不同的任务,同时可以在多个服务器上自动化地运行任务。 RUNDECK安装部署 环境准备 服务器操作系统:CentOS 7.x 或 RHEL 7.x 预装…

    other 2023年6月27日
    00
  • 小米5s有哪些优缺点汇总 小米5s性价比怎么样

    以下是对小米5s的优缺点以及性价比的详细分析: 优点: 性能强大:小米5s搭载了高性能的骁龙821处理器和适当的内存配置,能够提供出色的性能表现。 摄影能力:小米5s配备了一颗1200万像素的索尼IMX378传感器,具有较高的拍照质量和细节表现能力。 指纹识别:小米5s采用了前置指纹识别技术,能够快速准确地解锁手机,并支持指纹支付等功能。 设计精美:小米5s…

    other 2023年10月17日
    00
  • 魔兽世界8.0邪DK怎么输出 8.0邪DK天赋加点特质选择及输出手法

    魔兽世界8.0邪DK输出攻略 1. 邪DK天赋加点特质选择 1.1 天赋选择 邪DK目前的天赋可以根据实际情况进行选择。在单切场合,推荐选择以下三个天赋: 副手要塞军团士兵:能够增加副手武器的伤害输出。 鲜血盛宴:在战斗中可以回复生命值。 黑暗突变:能够增加鲜血打击和灵界打击的伤害。 在多切场合,可以选择以下几个天赋: 符文打击:可以增加主手武器的伤害输出,…

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