【问题标题】:Navigate from navigate controller changed toolbar title not only in the next, but also in the previous fragment从导航控制器更改工具栏标题不仅在下一个,而且在上一个片段中导航
【发布时间】:2021-11-03 21:25:30
【问题描述】:

在我的项目中,我使用 DrawerLayout 和 BottomNavigation。 DrawerLayout 用于一些全局选项,BottomNavigation - 用于本地。但是……

我有一个问题: 当我使用 findNavController().navigate 打开新片段时,旧片段的标题更改为与新片段标题相同。

我的新片段代码:

override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        (requireActivity() as AppCompatActivity).setSupportActionBar(binding.toolbar)
        (requireActivity() as AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(true)

        if (args.action == null) {
            binding.toolbar.title = requireActivity().getString(R.string.menu_create_new_action)
        } else {
            binding.toolbar.title = requireActivity().getString(R.string.menu_edit_action)
        }
    }

我的导航:

<?xml version="1.0" encoding="utf-8"?>
<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/mobile_navigation"
    app:startDestination="@+id/nav_main">

    <fragment
        android:id="@+id/nav_main"
        android:name="com.smog.bestdeals.ui.main.MainFragment"
        android:label="@string/menu_timers"
        tools:layout="@layout/fragment_main" >
        <action
            android:id="@+id/action_nav_main_to_nav_create_edit_timer"
            app:destination="@id/nav_create_edit_timer">
        </action>


        <action
            android:id="@+id/action_nav_main_to_nav_create_edit_action"
            app:destination="@+id/nav_create_edit_action">
        </action>


        <action
            android:id="@+id/action_nav_main_to_nav_settings"
            app:destination="@id/nav_settings" />
        <action
            android:id="@+id/action_nav_main_to_nav_timers"
            app:destination="@id/nav_timers"/>
    </fragment>

    <fragment
        android:id="@+id/nav_timers"
        android:name="com.smog.bestdeals.ui.home.HomeFragment"
        android:label="@string/menu_timers"
        tools:layout="@layout/fragment_home" />
    <fragment
        android:id="@+id/nav_create_edit_timer"
        android:name="com.smog.bestdeals.ui.timer.CreateEditTimerFragment"
        android:label="@string/menu_create_new_timer"
        tools:layout="@layout/fragment_create_edit_timer" >
        <action
            android:id="@+id/action_nav_create_edit_timer_to_nav_main"
            app:destination="@id/nav_main" />

        <argument
            android:name="timer"
            app:argType="com.smog.bestdeals.data.repository.Timer"
            app:nullable="true" />

    </fragment>
    <fragment
        android:id="@+id/nav_create_edit_action"
        android:name="com.smog.bestdeals.ui.action.CreateEditActionFragment"
        android:label="@string/menu_create_new_action"
        tools:layout="@layout/fragment_create_edit_action" >
        <action
            android:id="@+id/action_nav_create_edit_action_to_nav_main"
            app:destination="@id/nav_main" />

        <argument
            android:name="action"
            app:argType="com.smog.bestdeals.data.repository.Action"
            app:nullable="true" />
    </fragment>

</navigation>

如何解决这个问题?谢谢

附:我创建了这个答案,因为我寻找错误大约 1 小时。也许有人会遇到同样的问题,所以我决定在网站上添加一个问题和答案。

【问题讨论】:

    标签: android navigation fragment navigation-drawer toolbar


    【解决方案1】:

    因为我使用导航控制器,它使用 android:label 属性,当我使用 findNavController().navigate NavController 从导航文件中获取标签并自动更改标题。所以,我的决定是:从导航文件中删除标签属性。这是为了以防您在另一个片段之上打开一个新片段。我的应用使用三个选项:当前片段上方、BottomNavigationView、NavigationDanwer。

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 2020-03-08
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多