我使用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;
}
});
答案 0 :(得分:7)
您可以使用以下代码格式:
VERSION BUILD=11.5.498.2403
TAB T=1
SET !PLAYBACKDELAY 0.2
Set !EXTRACT_TEST_POPUP NO
TAG POS=1 TYPE=TH ATTR=TXT:Actions
TAG POS=R1 TYPE=SPAN ATTR=TXT: EXTRACT=TXT
SET !VAR1 EVAL("var s='{{!EXTRACT}}'; if(s.length > 1){var x=\"\";}else{var x=\"TAB OPEN\";};")
{{!VAR1}}
答案 1 :(得分:6)
use必须添加注释才能返回lambda
bottomNavigation.setOnNavigationItemSelectedListener { item ->
when(item.itemId){
R.id.home -> {}
R.id.group -> {}
R.id.profile -> {}
}
return@setOnNavigationItemSelectedListener true
}
答案 2 :(得分:4)
您可以使用以下代码
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
}
答案 3 :(得分:3)
这是我使用新导航组件的代码。 让我知道您是否需要导航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
}
答案 4 :(得分:1)
在每个块中返回布尔值,因为setOnNavigationItemSelectedListener需要返回类型
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
}
}
}
}
答案 5 :(得分:1)
bottomNavigationView.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.action_favorites -> { }
R.id.action_schedules -> { }
R.id.action_music -> { }
}
true
}
请注意,最后一行似乎错过了return关键字,但
lambda中的最后一个表达式被视为返回值:
来自https://kotlinlang.org/docs/reference/lambdas.html
此外,@setOnNavigationItemSelectedListener创建一个
local final fun <anonymous> (it: Menuitem) : Boolean
包装后面的内容,因此在某些答案中,这将具有仅在设置了侦听器(仅一次)时执行when块的效果,并且回调将只是返回true语句。