內容目錄

概述

除了直接編輯 layout xml 檔,靜態的設定 fragment 之外,還可以使用 FragmentManager,在程式中動態的調整。

文章裏面的程式碼,是基於之前文章「Android 開發 – Fragment – 基本用法 1:以靜態的方式加入 Fragment,請先參考後再繼續閱讀。

以 Fragment Manager 的方式實作是用來了解其運作的機制,實務上建議使用 Navigation component 的方式來處理。

相關檔案

MainActivity.kt

SecondFragment.kt

fragment_second.xml

函式庫依賴

程式碼實作 – 替換 fragment

我們承續之前的專案,名稱為 Fragment Lab 01,其 package name 會是 com.example.fragmentlab01,相關內容請參考此處

SecondFragment.kt

建立一個新的 Blank Fragment,刪除不需要的部份,只需留下以下程式碼。

class SecondFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_second, container, false)
    }
}

fragment_second.xml

text 改為 Second Fragment,並將 textSize 設為 24sp,以方便觀察。

<?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=".SecondFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="24sp"
        android:text="Second Fragment" />

</FrameLayout>

MainActivity.kt

使用 FragmentManager 來用 SecondFragment 取代原來的 Fragment。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

				supportFragmentManager.beginTransaction()
            .replace(R.id.fragmentContainerView, SecondFragment())
            .commit()
}

參考資料

developers Guide: About Fragment

developers Guide: Fragment Manager

developers Guide: About Fragment

Android Fragments: FragmentContainerView

Last modified: 2023 年 3 月 23 日

Author

Comments

Write a Reply or Comment

Your email address will not be published.