我试图用活动
实现底层导航,并使用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
可能会得到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>
如果我写错了,告诉我,我会改进的。
在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