【问题标题】:FragmentManager begin transaction without container idFragmentManager 在没有容器 ID 的情况下开始事务
【发布时间】:2021-11-22 10:04:05
【问题描述】:
fragmentManager.beginTransaction().replace(R.id.fragment_container_view,mapFragment).commit();

据我们所知,这样我们可以加载或替换Fragment

但是 在这个 snippet 中,我们传递了片段容器 ID。

有什么办法 加载片段而不传递 ID 或传递 FragmentContainerView 而不是 id

【问题讨论】:

  • 为什么不给视图分配一个 ID(以编程方式,而不是 XML),然后将该 ID 传递给 replace 方法?

标签: java android android-studio android-fragments


【解决方案1】:

您可以使用导航图操作通过一行代码在片段之间导航:

 Navigation.findNavController(this).navigate(R.id.action_fragment1_to_fragment2)

前提是:

  • 您有一个如下所示的导航图
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_graph"
    app:startDestination="@id/fragment_1">

    <fragment
        android:id="@+id/fragment_1"
        android:name="Your.Package.Fragment_1"
        tools:layout="@layout/fragment_1_layout">
        <action
            android:id="@+id/action_fragment1_to_fragment2"
            app:destination="@id/fragment_2" />
    </fragment>
    <fragment
        android:id="@+id/fragment_2"
        android:name="Your.Package.Fragment_2"
        tools:layout="@layout/fragment_2_layout">
    </fragment>
</navigation>
  • 并且您已经编写了正确的代码来使用导航组件设置您的活动。

如果您不知道什么是导航组件,我强烈建议您参加 android 开发人员的导航实验室,它应该会指导您如何使用它来设置您的项目。

Learn Jetpack Navigation | Android Developers (Java)

有关导航组件和片段的更多信息,请点击这些链接并开始阅读 Android 开发者教程。

Fragments| Android Developers

Navigation Components | Android Developers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2021-10-31
    相关资源
    最近更新 更多