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
。
在 findFragmentById
中他们传入了 FrameLayout
(my_container) 而不是 Fragment
。我在文档中读到您可以传入容器 ID,但它让我感到困惑的是如何将其初始化为 Fragment
。这是如何工作的?
我应该使用FragmentManager
吗?我在文档中读到它已被弃用。
谢谢!
它将查看具有给定 ID 的容器,并为您提供当前位于其中的 Fragment
。在任何时候 findFragmentById
初始化 一个 Fragment
,它只会查看现有的,顾名思义。
您不应使用提供相同功能的本机 FragmentManager
on new versions of Android, as it has been deprecated, but the FragmentManager
from the AndroidX Fragment 库。
另见:https://developer.android.com/guide/fragments/fragmentmanager
In findFragmentById
they passed in a FrameLayout(my_container)
rather than a Fragment. I read in the docs that you can pass in a container id, but it confuses me how it will initialize it as a Fragment. How does this work?
你可以把容器想象成一个占位符,一次可以容纳一个片段;最初它没有片段,在这种情况下 if(fragment == null)
将得到满足,因此您可以进行片段事务(因此,容器布局现在被片段视图替换,这是分配的另一个 xml 布局到此特定片段并由其 onCreateView()
回调返回。onCreateView()
是片段的生命周期回调之一,系统会调用该回调,直到该片段在占位符中对用户完全可见为止。
稍后当您希望此占位符包含另一个片段时,您可以再次执行事务,它对新片段重复相同的事情,占位符将显示新片段的布局和生命周期方法此片段的一部分将被调用
Should I use FragmentManager
? I read in the docs that it's deprecated.
FragmentManger
(from android.app
package) and its getFragmentManager()
are deprecated, and you should use FragmentManager
(来自 androidx.fragment.app
包)和 getSupportFragmentManager()
而不是像你已经做的那样。
有关更多信息,您可以查看 FragmentManager doc and Fragment lifecycle。
我对 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
。
在
findFragmentById
中他们传入了FrameLayout
(my_container) 而不是Fragment
。我在文档中读到您可以传入容器 ID,但它让我感到困惑的是如何将其初始化为Fragment
。这是如何工作的?我应该使用
FragmentManager
吗?我在文档中读到它已被弃用。
谢谢!
它将查看具有给定 ID 的容器,并为您提供当前位于其中的
Fragment
。在任何时候findFragmentById
初始化 一个Fragment
,它只会查看现有的,顾名思义。您不应使用提供相同功能的本机
FragmentManager
on new versions of Android, as it has been deprecated, but theFragmentManager
from the AndroidX Fragment 库。 另见:https://developer.android.com/guide/fragments/fragmentmanager
In
findFragmentById
they passed in aFrameLayout(my_container)
rather than a Fragment. I read in the docs that you can pass in a container id, but it confuses me how it will initialize it as a Fragment. How does this work?
你可以把容器想象成一个占位符,一次可以容纳一个片段;最初它没有片段,在这种情况下 if(fragment == null)
将得到满足,因此您可以进行片段事务(因此,容器布局现在被片段视图替换,这是分配的另一个 xml 布局到此特定片段并由其 onCreateView()
回调返回。onCreateView()
是片段的生命周期回调之一,系统会调用该回调,直到该片段在占位符中对用户完全可见为止。
稍后当您希望此占位符包含另一个片段时,您可以再次执行事务,它对新片段重复相同的事情,占位符将显示新片段的布局和生命周期方法此片段的一部分将被调用
Should I use
FragmentManager
? I read in the docs that it's deprecated.
FragmentManger
(from android.app
package) and its getFragmentManager()
are deprecated, and you should use FragmentManager
(来自 androidx.fragment.app
包)和 getSupportFragmentManager()
而不是像你已经做的那样。
有关更多信息,您可以查看 FragmentManager doc and Fragment lifecycle。