【问题标题】:Navigating back to previous fragment - NavGraph导航回上一个片段 - NavGraph
【发布时间】:2021-08-29 11:07:05
【问题描述】:

我正在使用 NavGraph - Navigation UI 组件从一个片段导航到另一个片段。

设备用于导航的物理按钮,但我如何激活应用顶部的后退箭头以返回上一个片段

导航图

 <?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/nav_graph"
    app:startDestination="@id/charactersFragment">

    <fragment
        android:id="@+id/charactersFragment"
        android:name="com.example.breakingbad.CharactersFragment"
        android:label="fragment_characters"
        tools:layout="@layout/fragment_characters" >
        <action
            android:id="@+id/action_charactersFragment_to_characterDetailFragment"
            app:destination="@id/characterDetailFragment" />
    </fragment>
    <fragment
        android:id="@+id/characterDetailFragment"
        android:name="com.example.breakingbad.CharacterDetailFragment"
        android:label="fragment_character_detail"
        tools:layout="@layout/fragment_character_detail" />
</navigation>

CharacterDetailFragment - 目前没有太大作用

class CharacterDetailFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_character_detail, container, false)
    }
}

活动

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val navController = Navigation.findNavController(this, R.id.fragment)
        NavigationUI.setupActionBarWithNavController(this, navController)
    }
}

编辑

将活动代码更新为这个并且它工作了

class MainActivity : AppCompatActivity() {

    private lateinit var navController: NavController

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navController = Navigation.findNavController(this, R.id.fragment)
        NavigationUI.setupActionBarWithNavController(this, navController)
    }

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

谢谢 回复

【问题讨论】:

  • 能否在activity中显示代码?
  • 用活动更新了问题
  • 你是用导航抽屉布局实现的吗??

标签: android kotlin navigation android-jetpack android-jetpack-navigation


【解决方案1】:

我们称之为“向上”导航按钮。有关此问题的讨论,请参见此处:

How to handle up button inside fragment using Navigation Components

该解决方案至少需要使用setupActionBarWithNavController() 方法。

【讨论】:

  • 谢谢@Gavin 使用以下代码更新了活动,它运行良好,谢谢
  • 类 MainActivity : AppCompatActivity() { private lateinit var navController: NavController override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) navController = Navigation.findNavController (this, R.id.fragment) NavigationUI.setupActionBarWithNavController(this, navController) } override fun onSupportNavigateUp(): Boolean { return navController.navigateUp() || super.onSupportNavigateUp() } }
【解决方案2】:

只需将onSupportNavigateUp() 添加到您的主要活动中

override fun onSupportNavigateUp() = navController.navigateUp()

【讨论】:

    【解决方案3】:

    如果您使用导航抽屉布局实现这一点,则使用此行返回上一个片段但是如果您想使用底部导航和导航抽屉布局click here 实现导航组件。只是它解释了未来的帮助。

    appBarConfiguration = AppBarConfiguration(navController.graph, drawerLayoutID)
    NavigationUI.setupActionBarWithNavController(this, navController,
         drawerLayoutID)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-14
      • 2016-07-13
      • 1970-01-01
      • 2019-03-22
      相关资源
      最近更新 更多