我有一个导航图的活动。在工具栏中,我有“后退”按钮(左边)和“关闭”按钮(右侧)。我的装置看起来像这样
活动布局
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/appBarColor"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:navigationIcon="?homeAsUpIndicator"
app:navigationIconTint="?attr/primaryTextColor"
app:titleTextColor="?attr/primaryTextColor"
tools:layout_height="50dp" />
</com.google.android.material.appbar.AppBarLayout>
活性OnCreate
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
navController = navHostFragment.navController
navController.graph = navController.navInflater.inflate(R.navigation.activation_nav_graph)
val appBarConfiguration = AppBarConfiguration.Builder().setFallbackOnNavigateUpListener { onSupportNavigateUp() }.build()
binding.toolbar.setupWithNavController(navController, appBarConfiguration)
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)
onCreateOptionsMenu使关闭按钮充气
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_buy_now, menu)
return true
}
onOptionsItemSelected处理关闭按钮单击
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.action_close) {
setResult(Activity.RESULT_CANCELED)
finish()
return true
}
return super.onOptionsItemSelected(item)
}
用于处理向上导航的自定义onSupportNavigateUp
override fun onSupportNavigateUp(): Boolean {
return when (currentDestination) {
R.id.fragment1 -> {
setResult(Activity.RESULT_CANCELED)
finish()
return true
}
R.id.fragment3 -> {
setResult(Activity.RESULT_OK)
finish()
return true
}
else -> navController.navigateUp()
}
}
除了只调用第一个片段中的onSupportNavigateUp之外,一切都运行良好。即导航图有4个片段。如果按下片段1中的“后退”按钮,就会调用onSupportNavigateUp并进行适当的处理。但是,如果您导航到第2、3或4段并按下工具栏中的后退按钮,则不会调用onSupportNavigateUp。什么可能是理由?
发布于 2022-06-07 09:11:47
由于某种原因,我膨胀导航图的方式不起作用。我改变了活动OnCreated()
binding.toolbar.setNavigationOnClickListener { onSupportNavigateUp() }
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
navController = navHostFragment.navController
navController.setGraph(R.navigation.nav_graph)
setupActionBarWithNavController(navController)
现在正常工作了。onSupportNavigateUp和onOptionsItemSelected都被调用。
https://stackoverflow.com/questions/72486987
复制相似问题