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)