android - onBackPressed() 方法在使用导航组件时不适用于底部导航视图
问题描述
我使用了带有导航组件的底部导航视图,当我在导航项目(即最近、附近等选项卡)之间切换时,后退按钮工作正常 查看图像以进行澄清
但是当我打开应用程序并且不在导航项之间切换并直接按后退按钮以关闭应用程序时,后退按钮不起作用。
让我详细解释我的问题
1. 以后退按钮工作正常的场景为例
当我打开应用程序并单击任何 BottomNavigationView 项目(即“最近”、“收藏”、“附近”选项卡),然后当我按下返回按钮时,返回按钮工作正常,它会转到初始选项卡,即“最近”选项卡,然后再次按下应用程序的返回按钮很接近。这个场景还行
2 采取后退按钮不起作用的第二种情况
当我打开应用程序并且不在bottomNavigationView 的选项卡(即Recents 选项卡等)之间切换并按下返回按钮时,返回按钮不起作用,现在如何解决此问题。
这是BottomNavigationView的代码
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="?android:attr/windowBackground"
android:fitsSystemWindows="true"
app:menu="@menu/menu_bottom_nav_view"
app:itemIconTint="@drawable/bottom_nav_tab_selector"
app:itemTextColor="@drawable/bottom_nav_tab_selector"
app:labelVisibilityMode="labeled"
app:itemTextAppearanceActive="@style/BottomNavigationView.Active"
app:itemTextAppearanceInactive="@style/BottomNavigationView.Inactive"
android:padding="@dimen/_5sdp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
和 Kotlin 代码
class HomeActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
navController = Navigation.findNavController(this, R.id.navHostHomeFragment)
//attaching bottom navigation view with nav host fragment
bottomNavigationView.setupWithNavController(navHostHomeFragment.findNavController())
//When Nav Controller destination change then getting current fragment label and set that label to toolbar textview
navController.addOnDestinationChangedListener { controller, destination, arguments ->
tvHomeToolbar.text = destination.label
}
}
override fun onNavigateUp(): Boolean {
return navController.navigateUp()
}
}
活动主页.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".ui.activities.home.HomeActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="@drawable/bg_app_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:gravity="center">
<TextView
android:id="@+id/tvHomeToolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="@dimen/_14ssp"
android:fontFamily="@font/sf_ui_font_semibold"
android:textColor="@android:color/white"
android:text="@string/app_name"
android:layout_gravity="center"
android:gravity="center"/>
</com.google.android.material.appbar.AppBarLayout>
<View
android:id="@+id/lineSeparatorTop"
android:layout_width="0dp"
android:layout_height="@dimen/_2sdp"
android:background="@color/color_gray"
app:layout_constraintTop_toBottomOf="@id/appBarLayout"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>
<fragment
android:id="@+id/navHostHomeFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph_home"
app:layout_constraintTop_toBottomOf="@id/lineSeparatorTop"
app:layout_constraintBottom_toTopOf="@id/lineSeparatorBottom"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<View
android:id="@+id/lineSeparatorBottom"
android:layout_width="0dp"
android:layout_height="@dimen/_2sdp"
android:background="@color/color_gray"
app:layout_constraintBottom_toTopOf="@id/bottomNavigationView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="?android:attr/windowBackground"
android:fitsSystemWindows="true"
app:menu="@menu/menu_bottom_nav_view"
app:itemIconTint="@drawable/bottom_nav_tab_selector"
app:itemTextColor="@drawable/bottom_nav_tab_selector"
app:labelVisibilityMode="labeled"
app:itemTextAppearanceActive="@style/BottomNavigationView.Active"
app:itemTextAppearanceInactive="@style/BottomNavigationView.Inactive"
android:padding="@dimen/_5sdp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
解决方案
推荐阅读
- python - 如何使用漂亮的汤在 XHTML 中提取没有样式键的内联 CSS 样式
- python - 如何使用带有自定义标签名称的 python API 构建本地 docker 映像
- php - 授权后未调用 Laravel 6.x 策略(无中间件)
- android - setExactAndAllowWhileIdle 几乎完全被触发
- android - 是否可以在 Android 应用程序中使用 CPLEX?
- sage - 在 sage 中替换变量值
- string - 在带有电话号码的变量中插入连字符
- c# - 使用 Firebase In App Messaging 通过 C# .NET 向 Android 发送 In App Message
- flutter - Flutter Camera Plugin 拍摄暗图像错误
- c - ieee754 浮点数 1/x * x > 1.0