Android - Fragments教程
封面图
•
2025-12-28
•
Android开发
253
0
0
0
当然!下面是一个关于 **Android Fragments(片段)** 的详细教程,帮助你理解什么是 Fragment,以及如何在 Android 应用中使用它。 --- ## 📱 什么是 Fragment? `Fragment` 是 Android 中的一个组件,可以看作是 `Activity` 的一部分。它允许你将 UI 拆分成多个可重用的模块,特别适用于: - 多窗口布局(如平板或手机上的分屏) - 动态更新 UI - 更好的模块化设计 一个 `Fragment` 可以包含自己的生命周期、UI 和事件处理逻辑。 --- ## 🧩 Fragment 的基本结构 一个 Fragment 通常由以下几部分组成: ### 1. **XML 布局文件** 用于定义 Fragment 的 UI。 ```xml <!-- fragment_main.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello from Fragment!" /> </LinearLayout> ``` ### 2. **Fragment 类(Java/Kotlin)** ```java // MainActivity.java public class MainFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 加载 XML 布局 return inflater.inflate(R.layout.fragment_main, container, false); } } ``` ```kotlin // MainFragment.kt class MainFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { return inflater.inflate(R.layout.fragment_main, container, false) } } ``` --- ## 📄 在 Activity 中使用 Fragment 你可以通过两种方式在 Activity 中使用 Fragment: ### ✅ 方法一:静态加载(XML 中定义) 在 `activity_main.xml` 中直接添加 Fragment: ```xml <fragment android:name="com.example.myapp.MainFragment" android:id="@+id/fragmentMain" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` ### ✅ 方法二:动态加载(代码中添加) ```java // MainActivity.java FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.container, new MainFragment()); transaction.commit(); ``` ```kotlin // MainActivity.kt val fragmentManager = supportFragmentManager val fragmentTransaction = fragmentManager.beginTransaction() fragmentTransaction.replace(R.id.container, MainFragment()) fragmentTransaction.commit() ``` > 注意:你需要一个 `FrameLayout` 或其他容器来承载 Fragment。 --- ## 🔄 Fragment 的生命周期 Fragment 的生命周期与 Activity 相关,但有自己的独特方法。以下是主要方法: | 方法 | 描述 | |------|------| | `onAttach()` | Fragment 被绑定到 Activity | | `onCreate()` | 初始化 Fragment | | `onCreateView()` | 创建 Fragment 的视图 | | `onActivityCreated()` | Activity 的 onCreate 完成后调用 | | `onStart()` | Fragment 变为可见 | | `onResume()` | Fragment 获取焦点 | | `onPause()` | Fragment 失去焦点 | | `onStop()` | Fragment 不可见 | | `onDestroyView()` | Fragment 的视图被销毁 | | `onDestroy()` | Fragment 被销毁 | | `onDetach()` | Fragment 与 Activity 解除绑定 | --- ## 🧠 Fragment 通信 Fragment 之间或 Fragment 与 Activity 之间可以通过以下方式通信: ### 1. **通过接口(Interface)传递数据** ```java // 定义接口 public interface OnFragmentInteractionListener { void onSendData(String data); } // 在 Fragment 中 public class MainFragment extends Fragment { private OnFragmentInteractionListener listener; @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof OnFragmentInteractionListener) { listener = (OnFragmentInteractionListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener"); } } public void sendDataToActivity(String data) { listener.onSendData(data); } } ``` ```java // 在 Activity 中实现接口 public class MainActivity extends AppCompatActivity implements MainFragment.OnFragmentInteractionListener { @Override public void onSendData(String data) { // 接收数据 } } ``` --- ## 🧩 Fragment 与 Activity 的关系 - 一个 Activity 可以包含多个 Fragment。 - Fragment 不能独立存在,必须依附于 Activity。 - Fragment 不能直接启动另一个 Activity,但可以通过 Activity 来实现。 --- ## 🎯 小结 | 内容 | 说明 | |------|------| | Fragment | Android 的 UI 模块,可重复使用 | | 静态加载 | 在 XML 中直接添加 | | 动态加载 | 通过 `FragmentTransaction` 添加 | | 生命周期 | 与 Activity 紧密相关 | | 通信 | 通过接口、Bundle 或 Activity 传递数据 | --- ## 📚 推荐学习资源 - [Android 官方文档 - Fragment](https://developer.android.com/guide/components/fragments) - [Android 开发者指南 - Fragment](https://developer.android.com/training/basics/fragments) - 《Android编程权威指南》第8章 --- 如果你有具体问题,比如如何实现 Fragment 切换、如何保存状态、如何与 RecyclerView 结合等,欢迎继续提问!
上一篇:
Android - UI Layouts教程
下一篇:
Android 内容提供者组件根据请求从一个应用程序向其他应用程序提供数据
标题录入,一次不能超过6条
留言
评论