如何使用 Kotlin 在 android 中的 BottomNavigationView 上设置 OnNavigationItemListener?
How to setOnNavigationItemListener on BottomNavigationView in android using Kotlin?
我使用 kotlin-android-extension,我可以从布局文件调用 bottomNavigationView
id 到 kotlin 文件。我可以使用 bottomNavigationView.setOnNavigationItemSelectedListener(BottomNavigationView.OnNavigationItemSelectedListener {})
,但下一步是什么?
据我所知在Java中还有一个函数叫做onNavigationItemSelected
,但是我在kotlin中找不到。
这是我想在 Java 中使用但无法在 kotlin 中编写的示例代码。
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_favorites:
case R.id.action_schedules:
case R.id.action_music:
}
return true;
}
});
您可以使用这种格式的代码:
bottomNavigation.setOnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.action_favorites -> {
}
R.id.action_schedules -> {
}
R.id.action_music -> {
}
}
true
}
使用必须为 return 仅 lambda 添加注释
bottomNavigation.setOnNavigationItemSelectedListener { item ->
when(item.itemId){
R.id.home -> {}
R.id.group -> {}
R.id.profile -> {}
}
return true
}
return boolean in each block because setOnNavigationItemSelectedListener expects return type
fun initViews() {
bottomNavigationView.setOnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.action_menu_media -> {
true
}
R.id.action_menu_tag -> {
true
}
R.id.action_menu_home -> {
true
}
else -> {
true
}
}
}
}
您可以使用下面的代码
bottom_navigation.setOnNavigationItemSelectedListener {
var selectedFragment: Fragment = A()
when (it.itemId) {
R.id.action_item1 -> selectedFragment = A()
R.id.action_item2 -> selectedFragment = B()
R.id.action_item3 -> selectedFragment = C()
}
val transaction = fragmentManager.beginTransaction()
transaction.replace(R.id.frame_layout, selectedFragment)
transaction.commit()
return@setOnNavigationItemSelectedListener true
}
bottomNavigationView.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.action_favorites -> { }
R.id.action_schedules -> { }
R.id.action_music -> { }
}
true
}
请注意,最后一行似乎遗漏了 return 关键字,但是
The last expression in a lambda is considered the return value:
来自 https://kotlinlang.org/docs/reference/lambdas.html
此外,@setOnNavigationItemSelectedListener 创建了一个
local final fun <anonymous> (it: Menuitem) : Boolean
包装后面的内容,所以在某些答案中,这将具有仅在设置侦听器时(仅一次)执行 when 块的效果,并且回调将只是一个 return true 语句。
这是我使用新导航组件的代码。
如果您需要导航方面的帮助,请告诉我 ui.
bottom_nav.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.home -> {
findNavController(R.id.nav_host_fragment)
.navigate(R.id.mainFragment)
}
R.id.search -> {
findNavController(R.id.nav_host_fragment)
.navigate(R.id.searchFragment)
}
R.id.inapppurchases -> {
findNavController(R.id.nav_host_fragment)
.navigate(R.id.inappPurchasesFragment)
}
R.id.settings -> {
findNavController(R.id.nav_host_fragment)
.navigate(R.id.settingsFragment)
}
}
true
}
我使用 kotlin-android-extension,我可以从布局文件调用 bottomNavigationView
id 到 kotlin 文件。我可以使用 bottomNavigationView.setOnNavigationItemSelectedListener(BottomNavigationView.OnNavigationItemSelectedListener {})
,但下一步是什么?
据我所知在Java中还有一个函数叫做onNavigationItemSelected
,但是我在kotlin中找不到。
这是我想在 Java 中使用但无法在 kotlin 中编写的示例代码。
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_favorites:
case R.id.action_schedules:
case R.id.action_music:
}
return true;
}
});
您可以使用这种格式的代码:
bottomNavigation.setOnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.action_favorites -> {
}
R.id.action_schedules -> {
}
R.id.action_music -> {
}
}
true
}
使用必须为 return 仅 lambda 添加注释
bottomNavigation.setOnNavigationItemSelectedListener { item ->
when(item.itemId){
R.id.home -> {}
R.id.group -> {}
R.id.profile -> {}
}
return true
}
return boolean in each block because setOnNavigationItemSelectedListener expects return type
fun initViews() {
bottomNavigationView.setOnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.action_menu_media -> {
true
}
R.id.action_menu_tag -> {
true
}
R.id.action_menu_home -> {
true
}
else -> {
true
}
}
}
}
您可以使用下面的代码
bottom_navigation.setOnNavigationItemSelectedListener {
var selectedFragment: Fragment = A()
when (it.itemId) {
R.id.action_item1 -> selectedFragment = A()
R.id.action_item2 -> selectedFragment = B()
R.id.action_item3 -> selectedFragment = C()
}
val transaction = fragmentManager.beginTransaction()
transaction.replace(R.id.frame_layout, selectedFragment)
transaction.commit()
return@setOnNavigationItemSelectedListener true
}
bottomNavigationView.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.action_favorites -> { }
R.id.action_schedules -> { }
R.id.action_music -> { }
}
true
}
请注意,最后一行似乎遗漏了 return 关键字,但是
The last expression in a lambda is considered the return value:
来自 https://kotlinlang.org/docs/reference/lambdas.html
此外,@setOnNavigationItemSelectedListener 创建了一个
local final fun <anonymous> (it: Menuitem) : Boolean
包装后面的内容,所以在某些答案中,这将具有仅在设置侦听器时(仅一次)执行 when 块的效果,并且回调将只是一个 return true 语句。
这是我使用新导航组件的代码。 如果您需要导航方面的帮助,请告诉我 ui.
bottom_nav.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.home -> {
findNavController(R.id.nav_host_fragment)
.navigate(R.id.mainFragment)
}
R.id.search -> {
findNavController(R.id.nav_host_fragment)
.navigate(R.id.searchFragment)
}
R.id.inapppurchases -> {
findNavController(R.id.nav_host_fragment)
.navigate(R.id.inappPurchasesFragment)
}
R.id.settings -> {
findNavController(R.id.nav_host_fragment)
.navigate(R.id.settingsFragment)
}
}
true
}