J'utilise l'extension kotlin-Android et je peux appeler bottomNavigationView
id du fichier de mise en page vers le fichier kotlin. Je peux utiliser bottomNavigationView.setOnNavigationItemSelectedListener(BottomNavigationView.OnNavigationItemSelectedListener {})
, mais quelle est la prochaine étape?
Pour autant que je sache en Java, il existe une autre fonction appelée onNavigationItemSelected
, mais je ne la trouve pas dans kotlin.
c'est l'exemple de code que je veux utiliser dans Java mais je ne peux pas l'écrire dans 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;
}
});
Vous pouvez utiliser ce format de code:
bottomNavigation.setOnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.action_favorites -> {
}
R.id.action_schedules -> {
}
R.id.action_music -> {
}
}
return true
}
Vous pouvez utiliser le code ci-dessous
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
}
l'utilisation doit ajouter une annotation pour renvoyer le lambda uniquement
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
}
notez que la dernière ligne semble manquer le mot-clé return, mais
La dernière expression dans un lambda est considérée comme la valeur de retour:
de https://kotlinlang.org/docs/reference/lambdas.html
De plus, @setOnNavigationItemSelectedListener crée un
local final fun <anonymous> (it: Menuitem) : Boolean
encapsulant ce qui suit, donc dans certaines réponses, cela aura pour effet d'exécuter le bloc when uniquement lorsque l'écouteur est défini (une seule fois), et le rappel ne sera qu'une instruction true true.
renvoyer un booléen dans chaque bloc car setOnNavigationItemSelectedListener attend un type de retour
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
}
}
}
}
Ceci est mon code utilisant le nouveau composant Navigation. Faites-moi savoir si vous avez besoin d'aide avec 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
}