目录
一、Fragment介绍
二、Fragment的使用方式
(一)、Fragment静态添加:
静态添加例子:
FirstFragment :
MainActivity:
main_activity:
fragment_first:
静态添加的总结:
(二)、Fragment动态添加:
Fragment动态添加例子:
MainActivity :
Fragment动态的添加总结:
一、Fragment介绍
Fragment 是 Android 平台上的一种 UI 组件,用于构建灵活且可复用的界面模块。每个 Fragment 都有自己的生命周期,可以嵌入到 Activity 中,并在一个 Activity 内部管理其自己的布局和行为。通过使用 Fragment,可以实现更加模块化和灵活的应用程序设计,提高代码的可重用性和可维护性。
Fragment 具有以下特点和优势:
-
模块化:Fragment 可以作为 Activity 的独立模块存在,使得应用程序的 UI 可以更细粒度地进行设计和组织。多个 Fragment 可以在同一个 Activity 中共存,实现更复杂的界面和交互效果。
-
生命周期:Fragment 拥有自己的生命周期,与包含它的 Activity 分开管理。这意味着可以在 Fragment 的生命周期方法中执行特定的操作,例如在创建、销毁和暂停时进行相应的处理。
-
布局灵活性:每个 Fragment 都可以拥有自己的布局文件,通过组合和嵌套 Fragment,可以实现灵活多样的用户界面布局。
-
通信与交互:Fragment 可以通过 Activity 传递数据和事件,也可以与其他 Fragment 进行通信。这种通信可以通过接口回调、共享 ViewModel 等方式实现。
-
适配性:通过使用 Fragment,可以更好地适应不同尺寸的屏幕和设备。可以根据屏幕大小和方向动态加载、替换或隐藏特定的 Fragment,以提供最佳的用户体验。
二、Fragment的使用方式
运行 Fragment 的静态添加和动态添加是两种常见的方式,用于在 Activity 中加载和展示 Fragment。
(一)、Fragment静态添加:
静态添加是指在 Activity 的布局文件中直接声明 Fragment,并与相应的布局容器关联。在静态添加的情况下,Fragment 的生命周期与 Activity 的生命周期紧密相关,它们的创建和销毁是由 Activity 控制的。
静态添加例子:
FirstFragment :
package com.example.fragmentdemo;import android.os.Bundle;import androidx.fragment.app.Fragment;import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class FirstFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_first, container, false);}
}
MainActivity:
package com.example.fragmentdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}
main_activity:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.fragment.app.FragmentContainerViewandroid:id="@+id/fragmentContainerView"android:name="com.example.fragmentdemo.FirstFragment"android:layout_width="410dp"android:layout_height="425dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
fragment_first:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".FirstFragment"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:textSize="25sp"android:text="我是第一个Fragment" /></FrameLayout>
静态添加的总结:
静态添加的步骤如下:
- 在 Activity 的布局文件中添加
<fragment>
标签,并指定该标签的android:name
属性为目标 Fragment 的完整类名。 - 可以使用其他属性来配置 Fragment,例如指定
android:layout_width
和android:layout_height
来决定 Fragment 在布局中的大小和位置。
(二)、Fragment动态添加:
动态添加是指在运行时通过代码将 Fragment 动态添加到 Activity 中。与静态添加不同,动态添加提供了更大的灵活性,可以根据需要在特定的时机添加或移除 Fragment。
Fragment动态添加例子:
MainActivity :
package com.example.fragmentdemo;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 创建一个 Fragment 实例SecondFragment fragment = new SecondFragment();// 获取 FragmentManagerFragmentManager fragmentManager = getSupportFragmentManager();// 开启事务FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// 将 Fragment 添加到容器fragmentTransaction.add(R.id.container, fragment, "myFragment");// 提交事务fragmentTransaction.commit();// 找到按钮视图并设置点击事件监听器Button btnSwitch = findViewById(R.id.btnSwitch);btnSwitch.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 创建一个 FirstFragment 实例FirstFragment firstFragment = new FirstFragment();// 开启新的事务FragmentTransaction switchTransaction = fragmentManager.beginTransaction();// 替换当前的 FragmentswitchTransaction.replace(R.id.container, firstFragment);// 提交事务switchTransaction.commit();}});}
}
FirstFragment 和SecondFragment 代码和布局跟上面的静态添加一样
Fragment动态的添加总结:
动态添加的步骤如下:
- 在 Activity 中定义一个 FragmentTransaction 对象,用于管理 Fragment 的添加、替换和移除操作。
- 使用 FragmentManager 获取 FragmentTransaction 对象。
- 调用 FragmentTransaction 的
add()
方法,将目标 Fragment 添加到 Activity 中,并指定一个容器视图的 ID,该 ID 对应于布局文件中的一个 View。 - 最后,调用 FragmentTransaction 的
commit()
方法提交事务,使得添加操作生效。