在我的 FragmentContainerView 对象中找不到方法 getFragment()

Posted

技术标签:

【中文标题】在我的 FragmentContainerView 对象中找不到方法 getFragment()【英文标题】:Can't find method getFragment() in my FragmentContainerView object 【发布时间】:2021-09-02 04:44:10 【问题描述】:

在我拥有的 XML 中

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/identifications_map_view"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:visibility="gone"
    android:layout_
    android:layout_ />

我想从视图中获取片段。 documentation 建议使用

FragmentContainerView fcv = findViewById(R.id.identifications_map_view);
SupportMapFragment smf = fcv.getFragment()

但 Android Studio 无法解析符号,如果我 CTRL+单击“FragmentContainerView”,当我使用 CTRL+F 搜索时它不会显示 getFragment()。

我知道还有另一种获取 Fragment 的方法,但我想知道为什么我不能这样做。我猜这个版本有问题,因为我似乎有一个比文档版本更旧的类,例如还有一个使用 FragmentManager 的额外构造函数,在文档中找不到。 它甚至可能是最小的 API 问题吗?我有 24 个。

谢谢。

【问题讨论】:

【参考方案1】:

从 1.4.0-alpha01 (https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0-alpha01) 开始添加

如果您使用的是较低版本,则不会出现。

【讨论】:

【参考方案2】:

正如 Sam 所说,方法 getFragment() 直到 1.4.0 alpha 版本才添加到 FragmentContainerView

但是,根据documentation:

此方法获取最近添加到容器中的视图的Fragment。这可以用作调用FragmentManager.findFragmentById 并传入FragmentContainerView 的id 的替代方法。

因此,这里的替代方法是像使用 &lt;fragment /&gt; 标签一样简单地执行此操作:

SupportMapFragment smf = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.identifications_map_view);

事情也一样。

【讨论】:

【参考方案3】:

我认为您对最小 api 的看法可能是正确的。 根据文档使用 androidx 包,您需要 api 28 或更高版本

https://developer.android.com/jetpack/androidx

【讨论】:

你需要编译 28或更高,我用30编译,即compileSdkVersion 30。我指的是minSdkVersion 24

以上是关于在我的 FragmentContainerView 对象中找不到方法 getFragment()的主要内容,如果未能解决你的问题,请参考以下文章

使用 androidx.fragment.app.FragmentContainerView 时出现 ClassNotFoundException

片段不使用 FragmentContainerView 切换

带有 FragmentContainerView 的 Null NavHostFragment/NavController

FragmentContainerView 中未调用/显示 OnMapReady

膨胀类android.fragment.app.FragmentContainerView时出错,有人可以告诉我我缺少啥

FragmentContainerView 和 app:navGraph - 此导航图未引用任何布局文件