はじめに
今回久しぶりにコードを書いていて、Kotlinのwhenに出会ったので覚えがきしておきます。
KotlinのコードからJavaのコードを見たくなることは、JavaでAndroidをやってた人にとってはありそうなので、そんなときの方法はリンクつけておきます。
Kotlin覚書 - KotlinからJavaにデコードする方法
Kotlinで出てきたwhenさん
普通にActivity生成しただけですが、いきなり「when」を使われても正直スッと頭に入ってこなかったので確認してみました。
whenの入ったコード
コードです。
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_home -> {
message.setText(R.string.title_home)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_dashboard -> {
message.setText(R.string.title_dashboard)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_notifications -> {
message.setText(R.string.title_notifications)
return@OnNavigationItemSelectedListener true
}
}
false
}
見た感じで雰囲気はわかります。
なので、BottomNavigationViewを選択したときのコールバックに対して処理が書かれてます。
Viewが3つ用意されているので、その3つのViewのリソースID毎に処理わけをしているようです。
つまり、Javaでいうところのswitch文みたいですね。
ではデコンパイルしてみてJavaのコードを覗いてみましょう。
private final OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = (OnNavigationItemSelectedListener)(new OnNavigationItemSelectedListener() {
public final boolean onNavigationItemSelected(@NotNull MenuItem item) {
Intrinsics.checkParameterIsNotNull(item, "item");
switch(item.getItemId()) {
case 2131230821:
((TextView)TopActivity.this._$_findCachedViewById(id.message)).setText(2131558459);
return true;
case 2131230822:
default:
return false;
case 2131230823:
((TextView)TopActivity.this._$_findCachedViewById(id.message)).setText(2131558460);
return true;
case 2131230824:
((TextView)TopActivity.this._$_findCachedViewById(id.message)).setText(2131558461);
return true;
}
}
});
やはりでしたね。
MenuItemの変数itemからgetItemIdをして、id毎の処理になってました。
whenの使い方
AndroidStudioでデコンパイルしただけだとswitchで書くのと変わらんやーん!
ってなったので、以下のサイトも参考にさせていただきました。ありがとうございました!
どうやらStringもいけるみたいですね。
自分で検証してみたいところですが、今回時間がなくてまだ検証コードがかけてないので、
それはまた後日アップしたいと思います!!