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日

相关文章

  • WPF实现基础控件之托盘的示例代码

    下面是WPF实现托盘的完整攻略: 一、前期准备 在开始编写代码之前,首先需要在项目中添加两个NuGet包: Hardcodet.NotifyIcon.Wpf(用于实现托盘功能) System.Windows.Interactivity.Wpf(用于方便地实现交互行为,如点击托盘图标时打开窗口) 这两个包的添加方式可以通过NuGet包管理器或在项目文件中手动添…

    other 2023年6月27日
    00
  • 在phpstudy中nginx伪静态配置

    在phpstudy中nginx伪静态配置 伪静态是指将动态链接通过一定规则转化为静态链接的一种技术。在nginx环境下,可以通过配置伪静态来优化网站的SEO、缓存效果等,从而提高网站的访问速度和用户体验。 为什么需要phpstudy中nginx伪静态配置 许多网站使用PHP为网站构建动态页面,利用PHP的文本处理能力实现网站数据的输出和处理。而PHP文件本身…

    其他 2023年3月29日
    00
  • Go语言使用HTTP包创建WEB服务器的方法

    下面是“Go语言使用HTTP包创建WEB服务器的方法”的完整攻略。 1. 创建一个基础的WEB服务器 首先,我们需要导入Go语言中的 http 包,并创建一个 http.HandleFunc() 函数来处理用户的请求。以下是创建一个基础的WEB服务器的代码示例: package main import ( "fmt" "net/…

    other 2023年6月27日
    00
  • Android RecycleView添加head配置封装的实例

    Android RecyclerView添加Head配置封装的实例攻略 在Android开发中,RecyclerView是一个常用的控件,用于展示大量数据列表。有时候我们需要在RecyclerView的顶部添加一个头部视图,以展示一些额外的信息。本攻略将详细讲解如何在RecyclerView中添加头部视图,并提供两个示例说明。 步骤一:创建RecyclerV…

    other 2023年9月6日
    00
  • Win10准正式版10240自制中文IOS系统镜像下载(32位)

    Win10准正式版10240自制中文IOS系统镜像下载(32位)攻略 简介 本攻略将详细介绍如何下载Win10准正式版10240自制中文IOS系统镜像(32位)。请按照以下步骤进行操作。 步骤一:准备工作 在开始下载之前,请确保您已经完成以下准备工作:1. 确认您的计算机满足Win10准正式版10240的系统要求。2. 确保您的计算机已连接到互联网。 步骤二…

    other 2023年7月28日
    00
  • C++分析构造函数与析造函数的特点梳理

    C++分析构造函数与析造函数的特点梳理 构造函数 构造函数是C++中的一个重要概念,它是类中的特殊函数。在创建对象时,构造函数主要用于初始化该对象的各个成员变量,以确保这些变量的初值是合法有效的。 构造函数的特点梳理如下: 构造函数的函数名与类名相同,通常没有返回值; 构造函数可以是无参的,也可以是包含参数的,甚至构造函数也可以多个重载; 实例化对象时构造函…

    other 2023年6月26日
    00
  • flash cs6类加载和应用程序域有什么作用?

    Flash CS6中的类加载和应用程序域主要作用于Flash应用程序的模块化开发和优化。类加载可以让我们在使用当前应用程序的同时,动态的添加或移除一些可选的模块。应用程序域则可以控制不同类之间的相互访问。 类加载 加载外部类库 动态加载外部AS文件,并将其中一个类创建为对象。可以使用Loader来完成这个任务,代码如下: //获取外部AS文件的文件位置 va…

    other 2023年6月25日
    00
  • Go 字符串比较的实现示例

    当然!下面是关于\”Go 字符串比较的实现示例\”的完整攻略: Go 字符串比较的实现示例 在Go语言中,我们可以使用==运算符来比较字符串是否相等。以下是两个示例: 示例1:基本的字符串比较 package main import \"fmt\" func main() { str1 := \"Hello\" str…

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