Вид снизу с действиями, не работающими в Kotlin - PullRequest
0 голосов
/ 28 января 2020

Я новичок в Kotlin, поэтому у меня возникли проблемы с решением этой проблемы.

Я создал нижнюю навигационную панель, которую я использую для переключения между действиями. Когда я вызываю BottomNavigationView.OnNavigationItemSelectedListener, мое приложение падает, и я не знаю почему. Кто-нибудь может помочь?

Я искал, но я нахожу ответы только по фрагментам.

Мой код MainActivity:

class MainActivity : AppCompatActivity() {

private val navigasjonen = BottomNavigationView.OnNavigationItemSelectedListener { item ->
    when (item.itemId) {
        R.id.home -> {
            return@OnNavigationItemSelectedListener false
        }
        R.id.leggTilNavigasjon -> {
            val intent = Intent(this@MainActivity, AddRec::class.java)
            startActivity(intent)
            return@OnNavigationItemSelectedListener true
        }
        R.id.favoritter -> {
            val intent = Intent(this@MainActivity, MyRecipes::class.java)
            startActivity(intent)
            return@OnNavigationItemSelectedListener true
        }
        R.id.utforsk -> {
            return@OnNavigationItemSelectedListener true
        }
    }
    false

}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val bottomNavigation = findViewById<BottomNavigationView>(R.id.bottom_navigation)
    //bottomNavigation.setSelectedItemId(R.id.home)
    bottomNavigation.setOnNavigationItemSelectedListener(navigasjonen)

}

}

Мой xml код:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorLys"
    android:id="@+id/home">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigationView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:background="?android:attr/windowBackground"
        app:menu="@menu/navigasjon" />
</androidx.constraintlayout.widget.ConstraintLayout>

Моя ошибка:

2020-01-27 14: 20: 06.197 20309-20309 / com.example.foodleaks E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.foodleaks, PID: 20309 java .lang.RuntimeException: невозможно запустить действие. ComponentInfo {com.example.foodleaks / com.example.foodleaks.MainActivity}: java .lang.NullPointerException: попытка выполнить вызовите виртуальный метод void com.google. android .material.bottomnavigation.BottomNavigationView.setOnNavigationItemSelectedListener (com.google. android .material.bottomnavigation.BottomNavigationView $ OnNavigationItemSelectedListener) 'на нулевой ссылке на объект, равной 1024. ActivityThread.performLaunchActivity (ActivityThread. java: 2913) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 3048) в android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 78) в android .app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor. java: 108) в android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 68 ) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1808) в android .os.Handler.dispatchMessage (Обработчик. java: 106) в android .os.Looper. l oop (Looper. java: 193) в android .app.ActivityThread.main (ActivityThread. java: 6669) в java .lang.reflect.Method.invoke (собственный метод) в com . android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 493) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 858) Причина: java .lang.NullPointerException: попытка вызвать виртуальный метод 'void com.google. android .material.bottomnavigation.BottomNavigationView.setOnNavigationItemSelectedListener (com.google. android .material.bottomnavigation.BottomNavigationView) onNavigationView $ onNlected Навигация по доллару США ссылка на объект на com.example.foodleak s.MainActivity.onCreate (MainActivity.kt: 39) в android .app.Activity.performCreate (Activity. java: 7136) в android .app.Activity.performCreate (Activity. java: 7127) в android .app.Instrumentation.callActivityOnCreate (Instrumentation. java: 1271) в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 2893) в android .app.ActivityThread.handleLaunchActivity (ActivityThread . java: 3048) в android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 78) в android .app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor. java: 108) в android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 68) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1808) в android .os.Handler. dispatchMessage (Handler. java: 106) в android .os.Looper.l oop (Looper. java: 193) в android .app.ActivityThread.main (ActivityThread. java: 6669 ) в java .lang.reflect.Method.invoke (родной метод) в com. android .internal.os.Run timeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 493) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 858)

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Ошибка присутствует в трассировке стека. Я рекомендую научиться читать Java / Android stacktraces:)

Виновник в stacktrace: Attempt to invoke virtual method 'void com.google.android.material.bottomnavigation.BottomNavigationView.setOnNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemSelectedListener)' on a null object reference

Ваш BottomNavigationView равен нулю. Почему?

Посмотрите на ваше объявление в макете: <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/navigationView

И вот как вы найдете представление:

findViewById<BottomNavigationView>(R.id.bottom_navigation)

Вы используете неправильный идентификатор.

0 голосов
/ 28 января 2020

В вашем findViewById вы передаете R.id.bottom_navigation:

val bottomNavigation = findViewById<BottomNavigationView>(R.id.bottom_navigation)

и в макете он имеет идентификатор:

android:id="@+id/navigationView"

Вы можете изменить идентификатор на layout:

android:id="@+id/bottom_navigation"

Или измените его в findViewById:

val bottomNavigation = findViewById<BottomNavigationView>(R.id.navigationView)

Будьте последовательны, чтобы он мог найти элемент BottomNavigationView и не обработал sh для нулевого объекта ссылка.

...