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,实现简单的信息展示功能。具体操作如下:
-
创建两个 Fragment,一个用于展示用户信息,一个用于展示系统信息。
-
在 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()
}
}
- 在布局文件中添加两个 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"
/>
- 在各自的 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。具体操作如下:
-
创建两个 Fragment,一个用于展示用户信息,一个用于展示系统信息。
-
在 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"
/>
- 在布局文件中添加一个按钮,用于替换当前展示的 Fragment:
<Button
android:id="@+id/btn_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Switch Fragment"
/>
- 在 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()
}
}
- 在各自的 Fragment 中实现 UI 组件的布局和数据填充等操作。示例代码同样与之前的示例相同,此处不再赘述。
以上便是 Fragment 基本使用方法及示例说明,希望能对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android Fragment 基本了解(图文介绍) - Python技术站