我在上箭头键上遇到了麻烦。所以基本上我有一个活动(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>
答案 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()
}
}