bottomnav FindViewById获得null(kotlin)

问题描述 投票:3回答:2

我正在尝试使用Activity实现底部导航并使用Kotlin。因此,我在youtube中搜索,发现很多内容都使用Fragment进行底部导航T_T

所以我尝试从https://www.youtube.com/watch?v=JjfSjMs0ImQ复制代码,因为它们使用Activity而不是Fragment

但是问题是他们使用Java。因此,我尝试将代码转换为Kotlin。然后发生了这种情况(Logcat)

原因:java.lang.IllegalStateException:bottomNavigationView不能为null在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

如果我写错了,告诉我,我会改善的。

我正在尝试通过Activity实现底部导航并使用Kotlin。所以我在youtube上搜索,看到很多内容都使用Fragment进行底部导航T_T,所以我尝试从...

java android kotlin bottomnavigationview findviewbyid
2个回答
3
投票

您的res / layout中应该有一个名为activity_profile.xml的文件,看起来像这样:


0
投票

非常感谢您的回复。这对我来说意义重大,因为这是我第一次在stackoverflow发表帖子

© www.soinside.com 2019 - 2024. All rights reserved.