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

问题描述 投票:0回答:4

在我的 XML 中

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

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

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

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

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

谢谢。

java android android-studio android-fragments documentation
4个回答
6
投票

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

如果您使用的是较低版本,它将不会存在。


4
投票

当你使用

androidx.fragment.app.Fragment
试试这个:

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/fragment_container"
    android:name="com.example.YourFragment"
    android:tag="custom_tag"
    tools:layout="@layout/your_fragment_layout" />

并通过以下方式获取此片段实例:

childFragmentManager.findFragmentByTag("custom_tag")

UPD:在某些情况下它不起作用。我不知道为什么。试试这个:

binding.fragmentContainer.getFragment<YourFragment>()

2
投票

正如 Sam 所说,方法

getFragment()
直到 1.4.0 alpha 版本才被添加到
FragmentContainerView
中。

但是,根据文档

此方法获取最近添加到容器中的

Fragment
。这可以作为调用
FragmentManager.findFragmentById
并传入
FragmentContainerView
的 id 的替代方法。

因此,这里的替代方法是像使用

<fragment />
标签一样简单地执行此操作:

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

一切都会好起来的。


-2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.