Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 工具栏后退按钮因开始目标而隐藏 背景_Android_Android Jetpack_Android Jetpack Navigation - Fatal编程技术网

Android 工具栏后退按钮因开始目标而隐藏 背景

Android 工具栏后退按钮因开始目标而隐藏 背景,android,android-jetpack,android-jetpack-navigation,Android,Android Jetpack,Android Jetpack Navigation,我试图在每个模块中使用一个活动,其中每个活动都有自己的导航图。因此,导航从一个动态功能模块中的活动转到另一个动态功能模块中的另一个活动 功能1/ActivityA->功能2/ActivityB ActivityA只需调用basicstartActivity方法来启动ActivityB 问题 因为从技术上讲,ActivityB的片段位于起始和目的地。它不会显示“后退”按钮,即使我的“后退”中有我的活动a。有没有办法绕过这个问题 注:由于ActivityA和ActivityB在两个单独的模块中,我避

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

功能1/ActivityA->功能2/ActivityB

ActivityA只需调用basic
startActivity
方法来启动ActivityB

问题 因为从技术上讲,
ActivityB
的片段位于起始和目的地。它不会显示“后退”按钮,即使我的“后退”中有我的
活动a
。有没有办法绕过这个问题

注:由于
ActivityA
ActivityB
在两个单独的模块中,我避免将它们放在一个图中。对于活动转换,我只是通过使用
className
创建
intent
来调用
startActivity

更新-即使我使用导航控制器从ActivityA的片段导航到ActivityB,问题仍然存在

ActivityB.xml landing_graph.xml

根据,如果您希望在所有目的地(甚至是起始目的地)上显示“向上”按钮,则应使用获取顶级目的地列表的
AppBarConfiguration
构造函数。通过传递一个空集,每个目的地都将显示向上按钮

因此,您的活动B应该是:

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()
    }
}

导航时使用单独的活动是否有原因?对于动态功能模块,不支持深度链接,这是主要原因。传递
emptySet
时出现的一个问题是,当加载startDestination片段时,启动目的地的
android:label
没有被拾取。感觉唯一的解决方法是在加载时从startDestination片段调用
setTitle
。顶级目的地集不用于确定是否设置标签的行为(对于每个目的地,它总是设置的)。听起来你好像还有其他问题。如果我没有通过
emptySet
,那么标题将不带后退按钮显示,因为它从导航图中选择了
android:label
,但当我通过
emptySet
时,它会选择我的应用程序名称作为标签。就个人而言,我看不出你有任何理由选择
app:title=“@string/title“
如果您在图形中使用的是
android:label
,请首先在工具栏上。即使如此,根据,标题也是无条件设置的,无论您传入的是哪一组。我正在动态更改
标题
,即尝试为每个功能模块保留一个活动。因此,单个活动可以有不同的导航图(也称为不同的开始目的地)。我将使用
setTitle
via fragment作为解决方法。谢谢你的帮助,真的很感激。
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()
    }
}
<?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>
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()
    }
}