当前位置: 首页 > 知识库问答 >
问题:

bottomnav FindViewById get null(kotlin)

西门安宁
2023-03-14

我试图用活动实现底层导航,并使用Kotlin。所以我在youtube上搜索,我看到了很多使用片段进行底部导航的内容

但问题是他们使用Java。所以我试着把代码转换成Kotlin。然后就发生了这种事(Logcat)

由:java.lang.IllegalStateException引起:在com.example.smscandroid.profile.onCreate(profile.kt:18)处,bottomNavigationView不能为空

所以我看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 (r.id.bottom_navigation) 可能会得到null,那么bottomnavigationview.selecteditemid=r.id.profile会导致异常

<?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>

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

共有1个答案

皇甫雨石
2023-03-14

在res/布局中应该有一个名为activity_profile.xml的文件,如下所示:

<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)
 类似资料:
  • 问题内容: 我有这段Java代码: 我想在Kotlin中获得MainActivity对象。自动转换在处中断。 问题答案: 您可以通过使用合格的来获得对Kotlin中对象的引用。例如:

  • 问题内容: 如何将Kotlin转换为varargs Java ? 如何将ArrayList传递给varargs方法参数? 问题答案: 您应该使用如下形式的 散布运算符 : 散布运算符需要放在数组参数的前面: 有关更多信息,请参见文档: 当我们调用-function时,可以一个接一个地传递参数,例如,或者,如果我们已经有一个数组并将其内容传递给该函数,则可以使用spread运算符(将数组前缀为):

  • 问题内容: 我在kotlin-stdlib中遇到了注解,我想知道它是做什么用的,但是不幸的是,它没有记录。(UPD:那时) 据我了解,将其应用于程序元素会将修饰符添加到相应的字节码元素中。结果,该元素在Java中变得不可见: Java代码中的某处: 但是相同的元素在Kotlin代码中仍然可见: 隐藏来自非Kotlin来源的声明是否有效使用?它是预期用途吗?还有哪些其他合适的用例? 由于从Java隐

  • 问题内容: 我是Kotlin的新手,最近将一个简单文件从Java转换为Kotlin。我想知道为什么Android转换器将我的java类更改为Kotlin对象。 Java: 转换的Kotlin: 为什么不呢? 任何帮助将不胜感激谢谢。 问题答案: Kotlin对象就像一个无法实例化的类,因此必须按名称进行调用。(本身是静态类) android转换器看到您的类仅包含静态方法,因此将其转换为Kotlin

  • 问题内容: 我不明白为什么可以在Kotlin的类外编写函数?这是一个好习惯吗? 例如,在Kotlin中可以在我的课外编写一个函数: 在Java中,这是不可能的!那不是面向对象语言正常工作的方式,对吗? 在文档中,他们讨论了经典函数的 局部 函数和在类或对象内部定义的函数的 成员函数 ,但是他们没有解释何时使用一个或另一个更好。 问题答案: 在Java中,这是不可能的!那不是面向对象语言正常工作的方

  • 问题内容: 我在Android应用程序开发中从Java稍微转移到Kotlin,但是在某些情况下,我不想用Kotlin进行编码,而是希望这些特殊情况用Java编写: 省去Kotlin多余的使用量 我知道现在正是Java总是以相反的方式触发 还提供了表达式和许多其他功能。 但仍然,我的某些代码无法用Kotlin编写,例如成员或字段。 Kotlin注释实际上可以代替那些注释。但是喜欢Java的某些编码功

  • 问题内容: 如何在Kotlin中建立一个拥有私有获取者(或没有私有获取者)却拥有公共委托者的财产? 不会出现错误: 就我而言,原因是Java互操作:我希望我的Java代码能够调用,但不能。 问题答案: 目前,在Kotlin中,不可能有一个带有传承人的财产,而不是财产。问题跟踪器中存在语言设计问题,可以随时对其进行观看/投票或分享您的用例:https : //youtrack.jetbrains.c

  • 问题内容: 更新 已针对此问题提交了一个错误:https : //youtrack.jetbrains.com/issue/KT-17951 更新2 该错误已在Android Studio 3.0 Canary 3中修复 原始帖子 我刚刚开始使用Android Studio 3.0,从一开始就启用了kotlin支持。我在项目中编写了一个非常简单的Kotlin类: 现在我想测试该类,首先我在Kotl