bottomnav FindViewById 获取空值(kotlin)
bottomnav FindViewById get null (kotlin)
我正在尝试使用 Activity
实现底部导航并使用 Kotlin。所以我在 youtube 上搜索,我看到很多内容使用 Fragment
作为底部导航 T_T
所以我尝试从 https://www.youtube.com/watch?v=JjfSjMs0ImQ 复制代码,因为他们使用 Activity
而不是 Fragment
但问题是他们使用 Java。所以我尝试将代码转换为 Kotlin。然后这发生了 (Logcat)
Caused by: java.lang.IllegalStateException: bottomNavigationView must not be null
at com.example.smscandroid.Profile.onCreate(Profile.kt:18)
所以我看Profile.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_profile)
//init
val bottomNavigationView =
findViewById<BottomNavigationView>(R.id.bottom_navigation)
//Set
bottomNavigationView.selectedItemId = R.id.profile
//Perform ItemSelectedListener
bottomNavigationView.setOnNavigationItemSelectedListener(BottomNavigationView.OnNavigationItemSelectedListener { menuItem ->
when (menuItem.itemId) {
R.id.medication -> {
startActivity(
Intent(
applicationContext
, Medication::class.java
)
)
overridePendingTransition(0, 0)
return@OnNavigationItemSelectedListener true
}
R.id.home -> {
startActivity(
Intent(
applicationContext
, MainActivity::class.java
)
)
overridePendingTransition(0, 0)
return@OnNavigationItemSelectedListener true
}
R.id.profile -> return@OnNavigationItemSelectedListener true
}
false
})
}
我认为错误在
//init
val bottomNavigationView =
findViewById<BottomNavigationView>(R.id.bottom_navigation)
//Set
bottomNavigationView.selectedItemId = R.id.profile
我认为 findViewById<BottomNavigationView>(R.id.bottom_navigation)
可能会得到 null
那么 bottomNavigationView.selectedItemId = R.id.profile
会导致 Exception
这是bottom_navigation.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/medication"
android:title="medication"
android:icon="@drawable/ic_medication"/>
<item
android:id="@+id/home"
android:title="home"
android:icon="@drawable/ic_home"/>
<item
android:id="@+id/profile"
android:title="profile"
android:icon="@drawable/ic_profile"/>
</menu>
为什么findViewById<BottomNavigationView>(R.id.bottom_navigation)
得到null
?
如果我写错了,告诉我,我会改进的。
您的 res/layout 中应该有一个名为 activity_profile.xml 的文件,如下所示:
<SomeLayout
...
>
<BottomNavigationView
android:id="@+id/this_is_the_id_you_should_use"
.../>
</SomeLayout>
然后在你的Profile.kt中你应该使用
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.this_is_the_id_you_should_use)
我正在尝试使用 Activity
实现底部导航并使用 Kotlin。所以我在 youtube 上搜索,我看到很多内容使用 Fragment
作为底部导航 T_T
所以我尝试从 https://www.youtube.com/watch?v=JjfSjMs0ImQ 复制代码,因为他们使用 Activity
而不是 Fragment
但问题是他们使用 Java。所以我尝试将代码转换为 Kotlin。然后这发生了 (Logcat)
Caused by: java.lang.IllegalStateException: bottomNavigationView must not be null at com.example.smscandroid.Profile.onCreate(Profile.kt:18)
所以我看Profile.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_profile)
//init
val bottomNavigationView =
findViewById<BottomNavigationView>(R.id.bottom_navigation)
//Set
bottomNavigationView.selectedItemId = R.id.profile
//Perform ItemSelectedListener
bottomNavigationView.setOnNavigationItemSelectedListener(BottomNavigationView.OnNavigationItemSelectedListener { menuItem ->
when (menuItem.itemId) {
R.id.medication -> {
startActivity(
Intent(
applicationContext
, Medication::class.java
)
)
overridePendingTransition(0, 0)
return@OnNavigationItemSelectedListener true
}
R.id.home -> {
startActivity(
Intent(
applicationContext
, MainActivity::class.java
)
)
overridePendingTransition(0, 0)
return@OnNavigationItemSelectedListener true
}
R.id.profile -> return@OnNavigationItemSelectedListener true
}
false
})
}
我认为错误在
//init
val bottomNavigationView =
findViewById<BottomNavigationView>(R.id.bottom_navigation)
//Set
bottomNavigationView.selectedItemId = R.id.profile
我认为 findViewById<BottomNavigationView>(R.id.bottom_navigation)
可能会得到 null
那么 bottomNavigationView.selectedItemId = R.id.profile
会导致 Exception
这是bottom_navigation.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/medication"
android:title="medication"
android:icon="@drawable/ic_medication"/>
<item
android:id="@+id/home"
android:title="home"
android:icon="@drawable/ic_home"/>
<item
android:id="@+id/profile"
android:title="profile"
android:icon="@drawable/ic_profile"/>
</menu>
为什么findViewById<BottomNavigationView>(R.id.bottom_navigation)
得到null
?
如果我写错了,告诉我,我会改进的。
您的 res/layout 中应该有一个名为 activity_profile.xml 的文件,如下所示:
<SomeLayout
...
>
<BottomNavigationView
android:id="@+id/this_is_the_id_you_should_use"
.../>
</SomeLayout>
然后在你的Profile.kt中你应该使用
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.this_is_the_id_you_should_use)