首页 > 解决方案 > 我在 Play 商店中启动应用程序后,片段工具栏后退按钮未显示

问题描述

这是我在 google play 中的第一个应用程序版本。我在这个项目中使用 MVVM 架构。我正在使用 android JetPACK 的导航。所以,我有一个活动,其余的都是片段。当我使用 android studio 运行我的应用程序时,它在工具栏中显示后退按钮,但是当我从 Play 商店下载我的应用程序时,它没有显示后退按钮。它像后退按钮一样工作,但后退按钮图标不存在。我不知道为什么会这样。

这是使用的代码活动

class SchoolDiaryMainActivity : AppCompatActivity() {

private var drawerLayout: DrawerLayout? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_school_diary_main)


    val toolbar = findViewById<Toolbar>(R.id.toolbar)
    setSupportActionBar(toolbar)

    val host: NavHostFragment =
        supportFragmentManager
            .findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment? ?: return

    val navController = host.navController

    setupActionBar(navController)
    setupNavigationMenu(navController)
}

private fun setupActionBar(navController: NavController) {
    drawerLayout = findViewById(R.id.drawer_layout)
    NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
}

private fun setupNavigationMenu(navController: NavController) {
    findViewById<NavigationView>(R.id.nav_view)?.let { navigationView ->
        NavigationUI.setupWithNavController(navigationView, navController)

    }
}

override fun onSupportNavigateUp(): Boolean {
    return NavigationUI.navigateUp(
        drawerLayout,
        Navigation.findNavController(this, R.id.my_nav_host_fragment)
    )
    onBackPressed()
    return true
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    val retValue = super.onCreateOptionsMenu(menu)
    menuInflater.inflate(R.menu.menu_empty, menu)
    return retValue
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return NavigationUI.onNavDestinationSelected(
        item,
        Navigation.findNavController(this, R.id.my_nav_host_fragment)
    )
            || super.onOptionsItemSelected(item)
}

}

//activity_school_diary_main

 <androidx.drawerlayout.widget.DrawerLayout
        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:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/drawer_layout"
        tools:context=".activities.SchoolDiaryMainActivity">
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:orientation="vertical">
        <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:minHeight="?attr/actionBarSize"
                android:fitsSystemWindows="true"
                android:background="@color/colorPrimary"
                android:theme="@style/ThemeOverlay.AppCompat.Dark"
                app:titleTextAppearance="@style/Toolbar.TitleText"/>
        <fragment
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/my_nav_host_fragment"
                android:name="androidx.navigation.fragment.NavHostFragment"
                app:navGraph="@navigation/nav_graph"
                app:defaultNavHost="true"/>
    </LinearLayout>
    <com.google.android.material.navigation.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start|left"
            app:menu="@menu/menu_nav_drawer"/>
</androidx.drawerlayout.widget.DrawerLayout>

我用于连接片段的 nav_graph 的某些部分作为 android jetpack 导航规则的一部分

     <?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/nav_graph"
                app:startDestination="@+id/diaryMainFrag">

<fragment android:id="@+id/testFragmentOne" android:name="amit.diary.studentdiaryentryTwo.fragments.TestFragmentOne"
          android:label="af_test_one" tools:layout="@layout/af_test_one"/>
<fragment android:id="@+id/diaryMainFrag" android:name="amit.diary.studentdiaryentryTwo.fragments.DiaryMainFrag"
          android:label="af_diary_main" tools:layout="@layout/af_diary_main">
    <action android:id="@+id/action_diaryMainFrag_to_homeworkFrag" app:destination="@id/homeworkFrag"/>

除了片段内部没有控制工具栏的代码行。我不认为在导航的任何地方都有后退按钮,我需要片段中的代码。 谷歌播放应用图片

Android Studio 应用图片

标签: androidandroid-fragmentsandroid-jetpack

解决方案


根据Navigation 1.0.0-beta01 发行说明

修复了使用带有混淆的 ProGuard 时,NavigationUI 处理的后退箭头不会出现的问题。b/123449431

所以升级到最新版本——目前1.0.0-rc02


推荐阅读