bottomnav FindViewById становится нулевым (kotlin) - PullRequest
3 голосов
/ 30 января 2020

Я пытаюсь реализовать нижнюю навигацию с Activity и использовать Kotlin. Поэтому я ищу в YouTube, и я видел много контента, который использует Fragment для нижней навигации T_T

Поэтому я пытаюсь скопировать код из https://www.youtube.com/watch?v=JjfSjMs0ImQ, потому что они используют Activity не Fragment

Но проблема в том, что они используют Java. Поэтому я пытаюсь преобразовать код в Kotlin. И затем это произошло (Logcat)

Причина: java .lang.IllegalStateException: bottomNavigationView не должен быть нулевым в com.example.sms candroid .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?

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

Ответы [ 2 ]

4 голосов
/ 30 января 2020

У вас должен быть файл с именем 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)
0 голосов
/ 31 января 2020

Большое спасибо за ваш ответ. Это очень много значит для меня, потому что я впервые пишу сообщение в stackoverflow

Я просто что-то пропускаю в R.layout.activity_profile, и я исправляю это, и теперь ЭТО РАБОТАЕТ !!! спасибо

...