android-fragments 在FragmentContainerView对象中找不到方法getFragment()

sxpgvts3  于 2022-11-14  发布在  Android
关注(0)|答案(4)|浏览(231)

在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”,它不会显示getFragment(),当我用CTRL+F搜索。
我知道有另一种方法可以得到Fragment,但是我想知道为什么我不能这样做。我猜是版本的问题,因为我的类的版本似乎比文档的版本要旧,例如,还有一个额外的使用FragmentManager的构造函数,在文档中找不到。这甚至可能是最小API的问题吗?我有24个。

  • 谢谢-谢谢
ac1kyiln

ac1kyiln1#

它已从1.4.0版添加至alpha01版(网址:)
如果你是在一个较低的版本,它不会有。

lrpiutwd

lrpiutwd2#

正如Sam所说,直到1.4.0 alpha版本,getFragment()方法才被添加到FragmentContainerView中。
但是,根据文件:
这个方法抓取Fragment,它的视图是最近添加到容器中的。这可以作为调用FragmentManager.findFragmentById和传入FragmentContainerView的id的替代方法。
因此,这里的另一种方法是简单地按照使用<fragment />标记的方式进行操作:

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

一切都会顺利的。

pgpifvop

pgpifvop3#

当您使用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>()
57hvy0tb

57hvy0tb4#

我想你可能是对的关于最低api。根据文档使用androidx包你需要api 28或更高
https://developer.android.com/jetpack/androidx

相关问题