нижняя навигация FindViewById получить нуль (котлин)

Я пытаюсь реализовать нижнюю навигацию с помощью 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?

Если я что-то не так напишу, скажите, я исправлю.


person FaithNJ    schedule 30.01.2020    source источник
comment
Содержит ли файл activity_profile.xml элемент BottomNavigation с идентификатором bottom_navigation?   -  person mightyWOZ    schedule 30.01.2020
comment
Можете ли вы добавить свой R.layout.activity_profile xml?   -  person Md. Asaduzzaman    schedule 30.01.2020


Ответы (1)


У вас должен быть файл с именем activity_profile.xml в вашем res/layout, который выглядит следующим образом:

<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)
person Luca Murra    schedule 30.01.2020