android - 为什么导航控制器不能声明为类变量?
问题描述
我是 android 新手,正在学习一些教程。目前致力于实现导航控制器并覆盖向上按钮功能。这样做的一部分是将操作栏与导航控制器链接并覆盖 onSupportNavigateUp()。在执行此操作时,我注意到我们必须通过 id 获取导航控制器两次,因此我决定创建一个执行此操作的类变量并重新使用该变量。问题是当我这样做时应用程序在启动时崩溃。我的猜测是这是因为我试图在膨胀视图之前获取导航控制器?
所以我的问题是为什么会这样:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@Suppress("UNUSED_VARIABLE")
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
val navController = this.findNavController(R.id.myNavHostFragment)
NavigationUI.setupActionBarWithNavController(this, navController)
}
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.myNavHostFragment)
return navController.navigateUp()
}
}
但这不起作用:
class MainActivity : AppCompatActivity() {
private val navController = this.findNavController(R.id.myNavHostFragment)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@Suppress("UNUSED_VARIABLE")
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
NavigationUI.setupActionBarWithNavController(this, navController)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp()
}
}
解决方案
你是对的,你navController
在视图膨胀并将null传递给之前分配setupActionBarWithNavController
你可以这样做,
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@Suppress("UNUSED_VARIABLE")
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
NavigationUI.setupActionBarWithNavController(this, navController)
navController = this.findNavController(R.id.myNavHostFragment)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp()
}
}
推荐阅读
- django - Django 1.11 Json 模型
- java - 如何在java上生成随机唯一数
- php - 使用带或不带值的 array_flip
- swift - UITapGestureRecognizer:模态视图被另一个视图重叠
- javascript - 如何在 es6 中编写更好的代码来格式化具有数组值的对象
- javascript - 为什么在我的 Babel 预设中添加“es-2015”会导致此基本应用程序中的“未定义导出”?
- javascript - 用 CSS 改变 div 的位置
- mysql - MYSQL:在 FUNCTION 中验证特定格式的输入值
- google-cloud-platform - 将文件传输到 jupyter 目录中的 google 计算引擎实例
- java - 查找私人课程