【问题标题】:NullPointerException on executing command on NavigationUI在 NavigationUI 上执行命令时出现 NullPointerException
【发布时间】:2019-06-15 16:02:12
【问题描述】:

找不到导致空异常问题的原因。由指南制作项目,它没有这个问题。使用与 guidr 中相同的库版本。

错误信息

Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.navigation.ui.NavigationUI
import androidx.navigation.ui.setupWithNavController
import kotlinx.android.synthetic.main.activity_main.*

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.nav_host_fragment)
        bottom_nav.setupWithNavController(navController)


        NavigationUI.setupActionBarWithNavController(this, navController)

    }

    override fun onSupportNavigateUp(): Boolean {
        return NavigationUI.navigateUp( navController, null)
    }
}

【问题讨论】:

  • 我知道我在说什么,因为我认为 spring 在我的代码中自动注入了它,但我必须使用 @Autowire 和变量手动完成。
  • 那么您的代码显然遗漏了minimal reproducible example 的所有部分。您的问题中甚至没有远程提及这一点。

标签: android navigation uinavigationcontroller android-architecture-components


【解决方案1】:
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
navController = Navigation.findNavController(this, R.id.nav_host_fragment)

您在setContentView 和navController = ... 之间缺少setSupportActionBar(toolbar)

【讨论】:

  • 原因是:每当使用NavigationUI.setupActionBarWithNavController时,导航架构组件都会自动将ActionBar的标题设置为setTitle();所以如果没有supportActionBar;然后调用 setTitle() 将引发 NPE
【解决方案2】:

应用主题下的res/values/styles:

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

这似乎是造成它的原因。奇怪,因为在指南中它不会造成任何麻烦。

【讨论】:

    猜你喜欢
    • 2019-04-25
    • 2018-05-19
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2012-03-03
    • 2023-04-05
    • 2018-06-11
    相关资源
    最近更新 更多