如何在 Android 中获取当前显示的 Fragment 实例?
简介
Android 应用程序由不同的组件构建而成,例如 Activity 和 Fragment。Fragment 是 Activity 的轻量级版本,因此在大多数情况下用于显示应用程序的 UI。Fragment 被认为是 Android 应用程序的基本组件之一。它们通常用于创建复杂、动态且健壮且高度可定制的用户界面。在 Android 应用程序中管理 Fragment 有点棘手,尤其是在从返回堆栈中恢复 Fragment 时。Android 应用程序中的一个 Activity 可以包含多个要显示的 Fragment。在本文中,我们将了解如何在 Android 中获取当前显示的 Fragment 实例。
实现
我们将创建一个简单的项目,在其中显示第一个 Fragment,并在其内部显示一个文本视图。我们将在 Activity 中显示第一个 Fragment,并在 Activity 中获取该 Fragment 的实例,并在应用程序中相应地显示 Toast 消息。
步骤 1:在 Android Studio 中创建新项目
如下图所示,导航到 Android Studio。在下方屏幕中,点击"新建项目"以创建一个新的 Android Studio 项目。
点击"新建项目"后,您将看到以下屏幕。
在此屏幕中,我们只需选择"空 Activity",然后点击"下一步"。点击"下一步"后,您将看到以下屏幕。
在此屏幕中,我们只需指定项目名称。然后包名称将自动生成。
注意 - 确保选择 Java 作为语言。
指定所有详细信息后,点击"完成"以创建一个新的 Android Studio 项目。
项目创建完成后,我们将看到两个打开的文件,即 activity_main.xml 和 MainActivity.java 文件。
步骤 3:使用 activity_main.xml
导航到 activity_main.xml。如果此文件不可见,请打开此文件。在左侧窗格中,导航至 app>res>layout>activity_main.xml 并打开此文件。打开此文件后,添加以下代码。代码中添加了注释,以便您详细了解。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/idRLLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<!-- creating a frame layout for displaying a container-->
<FrameLayout
android:id="@+id/frameContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
说明 - 在上面的代码中,我们创建了一个相对布局作为根布局,并在其中创建了一个框架布局,用于显示第一个 Fragment,其中包含一个文本视图和一个按钮。点击按钮后,我们将打开一个新的 Fragment。
步骤 4:创建新的 Fragment
现在我们将创建第一个 Fragment。要创建新的 Fragment,请依次导航至:app>java>您的应用包名称>右键单击它>新建>Fragment,然后选择一个空白 Fragment,并将其命名为 FragmentOne。创建新的 Fragment 后,将创建两个文件:一个名为 FragmentOne.java 的 Java 文件和 fragment_one.xml 文件。
步骤 5:使用 fragment_one.xml 文件
导航至 fragment_one.xml。如果此文件不可见,请打开此文件。在左侧窗格中,导航至 app>res>layout>fragment_one.xml 并打开此文件。打开此文件后,添加以下代码。代码中添加了注释,以便您详细了解。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".FragmentOne">
<!-- creating a text view for displaying tezt view on below line-->
<TextView
android:id="@+id/idTVHeading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Welcome to Tutorials Point"
android:textAlignment="center"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="bold" />
</RelativeLayout>
说明:在上面的代码中,我们创建了一个相对布局的根布局。在这个相对布局中,我们创建了一个文本视图,用于显示应用程序的标题。
步骤 6:使用 MainActivity.java 文件
导航到 MainActivity.java。如果此文件不可见,请打开它。在左侧窗格中,导航至 app>java>您的应用包名称>MainActivity.java 以打开此文件。打开此文件后,将以下代码添加到其中。代码中添加了注释,以便您详细了解。
package com.example.androidjavaapp;
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 下面一行创建并初始化 fragment 的变量。
Fragment fragment = new FragmentOne();
// 下面一行创建并初始化 fragment 事务的变量。
FragmentManager manager = getSupportFragmentManager();
// 下面一行创建 fragment 事务的变量。
FragmentTransaction transaction = manager.beginTransaction();
// 下面一行用 fragment 替换事务。
transaction.replace(R.id.frameContainer, fragment, "FragmentOne");
// 下面一行将返回栈添加为 null。
transaction.addToBackStack(null);
// 下面一行提交更改。
transaction.commit();
// 下面一行检查当前 fragment 是否为 fragment 1
FragmentOne fragmentOne = (FragmentOne) getSupportFragmentManager().findFragmentByTag("FragmentOne");
if (fragmentOne != null && fragmentOne.isVisible()) {
// if it is fragment one we are displaying a toast message.
Toast.makeText(this, "Fragment One is visibile", Toast.LENGTH_SHORT).show();
}
}
}
说明:在上面的代码中,我们可以看到 onCreate 方法,该方法正在为 activity_main.xml 填充布局。在这个 onCreate 方法中,我们加载了 FragmentOne,并为其添加了 backStack 和 null。之后,我们为 Fragment One 创建一个变量,在该变量中,我们检查框架布局中存在的 Fragment 是否为 FragmentOne。如果这是 Fragment 1,那么当 Fragment 1 可见时,我们会显示一条 Toast 消息。
添加上述代码后,现在只需点击顶部栏中的绿色图标即可在移动设备上运行我们的应用程序。
注意 - 确保您已连接到真实设备或模拟器。
输出
结论
在上面的教程中,我们了解了如何在 Android 应用程序中获取当前显示的 Fragment 实例。

