从导航控制器导航不仅在下一个片段中更改了工具栏标题,而且在上一个片段也更改了工具栏名称



在我的项目中,我使用DrawerLayout和BottomNavigation。抽屉布局用于一些全局选项,底部导航-用于本地。但是

我有个问题:当我使用findNavController((打开新片段时,导航旧片段的标题与新片段的标题相同。

我的代码来自新片段:

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个小时的错误。也许有人会面临同样的问题,所以我决定在网站上添加一个问题和一个答案。

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

最新更新