首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅在开始目标片段上调用onSupportNavigateUp。

仅在开始目标片段上调用onSupportNavigateUp。
EN

Stack Overflow用户
提问于 2022-06-03 08:45:25
回答 1查看 122关注 0票数 0

我有一个导航图的活动。在工具栏中,我有“后退”按钮(左边)和“关闭”按钮(右侧)。我的装置看起来像这样

活动布局

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
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使关闭按钮充气

代码语言:javascript
运行
复制
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.menu_buy_now, menu)
    return true
}

onOptionsItemSelected处理关闭按钮单击

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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。什么可能是理由?

EN

Stack Overflow用户

回答已采纳

发布于 2022-06-07 09:11:47

由于某种原因,我膨胀导航图的方式不起作用。我改变了活动OnCreated()

代码语言:javascript
运行
复制
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都被调用。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72486987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档