如何在 Android 中获取当前显示的 Fragment 实例?
简介
Android 应用程序使用不同的组件构建,例如 Activity 和 Fragment。Fragment 是 Activity 的轻量级版本,因此在大多数情况下用于显示应用程序的 UI。Fragment 被认为是 Android 应用程序的重要组件之一。它们通常用于创建复杂、动态的用户界面,该界面既健壮又高度可定制。管理 Android 应用程序中的 Fragment 有点棘手,尤其是在从返回堆栈恢复 Fragment 时。Android 应用程序中的一个 Activity 可以包含多个 Fragment 以在其内显示。在本文中,我们将了解如何在 Android 中获取当前显示的 Fragment 实例。
实现
我们将创建一个简单的项目,在其中显示第一个 Fragment,在其中显示一个 TextView。我们将在此 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>
说明 - 在上面的代码中,我们创建一个 RelativeLayout 作为根布局,在其中我们创建一个 FrameLayout,我们将在其中显示我们的第一个 Fragment,该 Fragment 将包含一个 TextView 和一个 Button。单击该按钮后,我们将打开一个新的 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>
说明:在上面的代码中,我们创建一个 RelativeLayout 作为根布局。在此 RelativeLayout 中,我们创建一个 TextView 用于显示应用程序的标题。
步骤 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);
// on below line creating and initializing variable for fragment.
Fragment fragment = new FragmentOne();
// on below line creating and initializing variable for fragment transcation.
FragmentManager manager = getSupportFragmentManager();
// on below line creating a variable for fragment transaction.
FragmentTransaction transaction = manager.beginTransaction();
// on below line replacing the transaction with the fragment.
transaction.replace(R.id.frameContainer, fragment, "FragmentOne");
// on below line adding back stack as null.
transaction.addToBackStack(null);
// on below line committing changes.
transaction.commit();
// on below line we are checking weather the current fragment is fragment one
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。之后,我们为 FragmentOne 创建另一个变量,在此变量中,我们检查 FrameLayout 中存在的 Fragment 是否为 FragmentOne。如果是 FragmentOne,则我们显示一条 Toast 消息“Fragment One 可见”。
添加上述代码后,我们只需单击顶部栏中的绿色图标即可在移动设备上运行我们的应用程序。
注意 - 请确保您已连接到您的真实设备或模拟器。
输出
结论
在上面的教程中,我们了解了如何在 Android 应用程序中获取当前显示的 Fragment 实例。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP