底部导航视图,其中活动在Kotlin中不起作用

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

我是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:20309java.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)'在android.app.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(Handler.java:106)在android.os.Looper.loop(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 $ OnNavigationItemSelectedListener)”在com.example.foodleaks.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.loop(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)。

android-studio kotlin nullpointerexception bottomnavigationview
3个回答
0
投票
更改此行:

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

with:

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

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

并且在布局中具有ID:

android:id="@+id/navigationView"

您可以更改布局上的ID:

android:id="@+id/bottom_navigation"

或在findViewById中进行更改:

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

保持一致,以便它可以找到BottomNavigationView元素,并且不会因空对象引用而崩溃。


0
投票
堆栈跟踪中的罪魁祸首: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)

您使用了错误的视图ID。

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