簡體   English   中英

findFragmentById 是否接受 FrameLayout 而不是 Fragment?

[英]Does findFragmentById take in a FrameLayout rather than a Fragment?

我是Fragments概念的新手

在我正在觀看的視頻中,他們使用了這段代碼:

FragmentManager fragmentManager = getSupportFragmentManager();
        Fragment fragment = fragmentManager.findFragmentById(R.id.my_container);

        if(fragment == null){
            fragment = new FragmentMain();
            fragmentManager.beginTransaction()
                    .add(R.id.my_container, fragment)
                    .commit();
        }

通過 java 創建Fragment

  1. findFragmentById他們傳入FrameLayout (my_container) 而不是Fragment 我在文檔中讀到您可以傳入容器 id,但這讓我感到困惑,它將如何將其初始化為Fragment 這是如何運作的?

  2. 我應該使用FragmentManager嗎? 我在文檔中讀到它已被棄用。

謝謝!

findFragmentById中,他們傳入了FrameLayout(my_container)而不是 Fragment。 我在文檔中讀到您可以傳入容器 id,但這讓我感到困惑,它將如何將其初始化為片段。 這是如何運作的?

您可以將容器視為一次可以容納一個片段的占位符; 最初它沒有片段,在這種情況下將滿足if(fragment == null) ,因此您可以進行片段事務(因此,容器布局現在被片段視圖替換,這是分配給此的另一個 xml 布局特定片段並由其onCreateView()回調返回onCreateView()是片段的生命周期回調之一,由系統調用,直到片段在占位符中對用戶完全可見。

稍后,當您希望此占位符保存另一個片段時,您可以再次執行事務,它與新片段重復相同的事情,占位符將顯示新片段的布局,並且該片段的生命周期方法將得到叫

我應該使用FragmentManager嗎? 我在文檔中讀到它已被棄用。

FragmentManger (來自android.app包)及其getFragmentManager()已被棄用,您應該使用FragmentManager (來自androidx.fragment.app包)和getSupportFragmentManager() ,就像您已經做過的那樣。

有關更多信息,您可以查看FragmentManager 文檔Fragment 生命周期

  1. 它將查看具有給定 ID 的容器,並為您提供當前在其中的Fragment findFragmentById初始化Fragment ,它只會查看現有的,顧名思義。

  2. 您不應在新版本的 Android 上使用本機FragmentManager ,因為它已被棄用,但AndroidX Fragment FragmentManager中的 FragmentManager 提供相同的功能。 另見: https://developer.android.com/guide/fragments/fragmentmanager

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM