私はkotlin-Android-extensionを使用しており、レイアウトファイルからkotlinファイルにbottomNavigationView
idを呼び出すことができます。 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 -> {
}
}
return 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
}
ラムダのみを返すには注釈を追加する必要があります
bottomNavigation.setOnNavigationItemSelectedListener { item ->
when(item.itemId){
R.id.home -> {}
R.id.group -> {}
R.id.profile -> {}
}
return true
}
bottomNavigationView.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.action_favorites -> { }
R.id.action_schedules -> { }
R.id.action_music -> { }
}
true
}
最後の行はreturnキーワードを見逃しているようですが、
ラムダの最後の式は戻り値と見なされます。
から https://kotlinlang.org/docs/reference/lambdas.html
さらに、@ setOnNavigationItemSelectedListenerは、
local final fun <anonymous> (it: Menuitem) : Boolean
続くものをラップするので、一部の回答では、リスナーが設定されている場合にのみ(1回だけ)whenブロックを実行する効果があり、コールバックは単にtrueを返すステートメントになります。
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
}
}
}
}
これは、新しいナビゲーションコンポーネントを使用した私のコードです。 nav 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
}