【发布时间】:2021-10-18 00:40:02
【问题描述】:
我是一个完全的 android 开发新手,过去两天我一直被这个问题困扰,我的生活中从未感到如此沮丧。先说一点背景故事,
我正在创建最基本的图书库应用程序,并尝试向应用程序添加导航抽屉。在 kotlin 文件中,当我使用 lateinit 声明所有变量(对应于布局文件中创建的标签)时,它会抛出一个 nullPointerException。出于这个原因,我开始像这样声明我的变量:
var drawerLayout: DrawerLayout? = null
这有助于我避免异常。 现在来解决真正的问题,
我试图以这种方式在 onCreate 方法中为我的 actionBarDrawerToggle 创建一个 click 监听器:
val actionBarDrawerToggle = ActionBarDrawerToggle(this@MainActivity, drawerLayout, R.string.open_drawer, R.string.close_drawer)
drawerLayout.addDrawerListener(actionBarDrawerToggle)
actionBarDrawerToggle.syncState()
由于某种原因,“drawerLayout.addDrawerListener(actionBarDrawerToggle)”行的 drawerLayout 部分带有红色下划线,表示存在错误。当我运行它时,这是它在构建窗口中显示的错误:
Smart cast to 'DrawerLayout!' is impossible, because 'drawerLayout' is a mutable property that could have been changed by this time
我不知道如何进行此操作。我已经尝试了很多东西,但它们都不起作用。我认为该错误可能与我上面描述的我使用的声明方法有关。如果有人可以帮助我,那就太好了
【问题讨论】:
-
您有没有问过为什么在使用
lateinit时得到NullPointerException的问题?也许您应该尝试解决您的核心问题,而不是尝试使用var来解决它。 -
@ianhanniballake 那么我到底应该怎么做才能解决这个问题?我的视图 ID 和我的变量名都匹配,所以没有错误,我尝试过这样使用非 null 断言调用: var drawLayout: DrawerLayout!!这也不好用,我已经清理了项目,使缓存失效,我已经搜索了很多地方,但我似乎无法找到解决方案
标签: android xml android-studio kotlin navigation-drawer