gpt4 book ai didi

android - 由于开始目的地隐藏了工具栏后退按钮

转载 作者:行者123 更新时间:2023-12-04 08:26:19 24 4
gpt4 key购买 nike

背景

我正在尝试为每个模块使用一个 Activity ,其中每个 Activity 都有自己的导航图。因此,导航从一个动态功能模块中的 Activity 转到另一个动态功能模块中的另一个 Activity 。

Feature1/ActivityA -> Feature2/ActivityB

ActivityA 只是调用基本的 startActivity 方法来启动 ActivityB。

问题

因为 ActivityB 从技术上讲在开始目的地有它的 fragment 。即使我的 ActivityA 在我的后台堆栈中,它也没有显示后退按钮。有什么办法可以解决这个问题吗?

PS:由于 ActivityAActivityB 在 2 个独立的模块中,我避免将它们放在一个图表中。对于 Activity 转换,我只是通过使用 className 创建 intent 来调用 startActivity

更新 - 即使我使用导航 Controller 从 ActivityA 的 fragment 导航到 ActivityB,问题仍然存在。

ActivityB.xml

</layout>

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<androidx.appcompat.widget.Toolbar
android:id="@+id/main_toolbar"
app:navigationIcon="@drawable/ic_back"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/title" />

<androidx.fragment.app.FragmentContainerView
android:id="@+id/host_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:defaultNavHost="true"
app:navGraph="@navigation/landing_graph" />
</LinearLayout>

</layout>

ActivityB.kt

internal class ActivityB : AppCompatActivity() {

private var navController : NavController? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val toolbar = binding.mainToolbar
navController = supportFragmentManager.findFragmentById(R.id.host_container) as NavHostFragment).navController
setSupportActionBar(toolbar)
toolbar.setNavigationOnClickListener { onBackPressed() }
toolbar.setupWithNavController(navController)
}

override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp() || super.onSupportNavigateUp()
}
}

landing_graph.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
app:startDestination="@id/blankFragment">
<fragment
android:id="@+id/blankFragment"
android:name="com.example.cashdog.cashdog.BlankFragment"
android:label="Blank"
tools:layout="@layout/fragment_blank" />

<fragment
android:id="@+id/blankFragment2"
android:name="com.example.cashdog.cashdog.BlankFragment2"
android:label="Blank"
tools:layout="@layout/fragment_blank_2" />
</navigation>

最佳答案

根据 AppBarConfiguration guide ,如果您希望“向上”按钮出现在所有目的地上,甚至是您的起始目的地,您应该使用包含顶级目的地列表的 AppBarConfiguration 构造函数。通过传递一个空集,每个目的地都会显示向上按钮。

因此你的 ActivityB 应该是:

internal class ActivityB : AppCompatActivity() {

private var navController : NavController? = null
private val appBarConfiguration = AppBarConfiguration(emptySet())

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val toolbar = binding.mainToolbar
navController = supportFragmentManager.findFragmentById(R.id.host_container) as NavHostFragment).navController
setSupportActionBar(toolbar)
// You must always use setupActionBarWithNavController
// when using setSupportActionBar()
setupActionBarWithNavController(navController, appBarConfiguration)
}

override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
}

关于android - 由于开始目的地隐藏了工具栏后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65247156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com