导航组件向上箭头不起作用

时间:2020-05-24 12:58:08

标签: android kotlin

我在上箭头键上遇到了麻烦。所以基本上我有一个活动(MainActivity)和两个片段(1. ListFragment 2.AddFragment)。当我从AddFragment按下向上箭头时,什么也没有发生,并且我需要实现一个功能,当我单击该箭头时,它会将我导航回ListFragment。

我的活动:

class MainActivity : AppCompatActivity() {

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

        val navController = findNavController(R.id.navHostFragment)
        setupActionBarWithNavController(navController)
    }
}

这是我的startDestination片段:

class ListFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_list, container, false)

        val addButton = view.findViewById<FloatingActionButton>(R.id.floatingActionButton)
        addButton.setOnClickListener {
            findNavController().navigate(R.id.navTo_addFragment)
        }

        return view
    }
}

这是我的第二个片段。所以这是问题所在,我可以看到向上箭头,但是当我单击它时什么也没有发生,并且我想要实现一个功能,当我按下向上箭头时,它会将我导航回到上面的ListFragment。

class AddFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_add, container, false)
    }

}

这是我的导航图:

<?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/my_nav"
    app:startDestination="@id/listFragment">

    <fragment
        android:id="@+id/listFragment"
        android:name="com.jovanovic.stefan.tododemo.ListFragment"
        android:label="ToDo List"
        tools:layout="@layout/fragment_list" >
        <action
            android:id="@+id/navTo_addFragment"
            app:destination="@id/addFragment" />
    </fragment>
    <fragment
        android:id="@+id/addFragment"
        android:name="com.jovanovic.stefan.tododemo.AddFragment"
        android:label="fragment_add"
        tools:layout="@layout/fragment_add" >
        <action
            android:id="@+id/navTo_ListFragment"
            app:destination="@id/listFragment"
            app:popUpToInclusive="false" />
    </fragment>
</navigation>

1 个答案:

答案 0 :(得分:2)

您需要在NavigateUp上设置MainActivity处理程序

class MainActivity : AppCompatActivity() {

lateinit var navController: NavController
lateinit var appBarConfiguration: AppBarConfiguration

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    navController = findNavController(R.id.navHostFragment)
    appBarConfiguration = AppBarConfiguration(navController.graph)
    setupActionBarWithNavController(this, navController, appBarConfiguration)
}

override fun onSupportNavigateUp(): Boolean {
    return navController.navigateUp()
            || super.onSupportNavigateUp()
  }
}
相关问题