如何在 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 例項。

更新於:2023年3月30日

4K+ 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.