java - findFragmentById 是否接受 FrameLayout 而不是 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();
}
Fragment
通过 java创建一个。
findFragmentById
他们传入的是( my_containerFrameLayout
) 而不是Fragment
. 我在文档中读到您可以传入容器 id,但这让我感到困惑,它将如何将其初始化为Fragment
. 这是如何运作的?我应该使用
FragmentManager
吗?我在文档中读到它已被弃用。
谢谢!
解决方案
findFragmentById
他们传入了一个而FrameLayout(my_container)
不是一个片段。我在文档中读到您可以传入容器 id,但这让我感到困惑,它将如何将其初始化为片段。这是如何运作的?
您可以将容器视为一次可以容纳一个片段的占位符;最初它没有片段,在这种情况下if(fragment == null)
将被满足,因此您可以进行片段事务(因此,容器布局现在被片段视图替换,这是分配给该特定片段并由其onCreateView()
回调返回的另一个 xml 布局.onCreateView()
是片段的生命周期回调之一,由系统调用,直到片段在占位符中对用户完全可见。
稍后当您希望这个占位符保存另一个片段时,您可以再次执行事务,它与新片段重复相同的事情,占位符将显示新片段的布局,并且该片段的生命周期方法将得到叫
我应该使用
FragmentManager
吗?我在文档中读到它已被弃用。
FragmentManger
(from android.app
package) 和它getFragmentManager()
已被弃用,你应该使用FragmentManager
(from androidx.fragment.app
package) 而 getSupportFragmentManager()
不是像你已经做过的那样。
有关更多信息,您可以查看FragmentManager 文档和Fragment 生命周期。
推荐阅读
- c++ - 在这种特定的类层次结构设计中如何避免向下转换?
- linux-mint - Anaconda 3 在 Linux Mint 19 中安装时抛出错误
- c# - 由于服务器应用程序重新启动而导致内存令牌丢失的 OAuth2
- syntax - Erlang 中的 io:format 和 io:fwrite 有什么区别?
- angular - 在 ng-template 上使用 ngfor 异步管道
- c# - 如何使用依赖注入在 Worker Service 和 WebService 之间传递公共对象
- javascript - 有没有一种方法可以在使用 javascript 循环进行迭代时为每个 html 元素调用一个函数
- python - ValueError:无法使用 groupby-splitted 数据框将输入数组从形状 (2) 广播到形状 (0)
- react-native - react-native:抽屉未打开
- java - 查询文件时 if 语句总是返回 false