android - 导航组件向上箭头不起作用
问题描述
我在使用向上箭头时遇到问题。所以基本上我有一个活动(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>
解决方案
您需要设置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()
}
}
推荐阅读
- arrays - 在 perl 中使用电子邮件 :: MIME 发送多个文件?
- python - 如何为缺少的日期时间增加价值
- sql - 在没有现有触发器\机制的情况下查询以查看上次为表更新行的日期和时间?
- reactjs - History.push 无法读取未定义的属性“道具”
- python - Windows 上的 Jenkins:iOS 的 UE4 打包失败并显示“主机密钥验证失败”。
- apache-superset - 如何更改 apache 超集图表的背景颜色?
- php - 在 Wordpress 的 tag.php 中显示标签相关的档案
- apache-kafka - Compaction 在 Apache Kafka 中的工作原理
- c# - C# - MVC - 如何基于一个外键列出多个条目
- java - GridBagLayout 会影响 JLabel 图像吗?