J'essaie d'implémenter des parties de NavigationDrawer de Mike Penz ( https://github.com/mikepenz/MaterialDrawer ) dans Kotlin. Depuis lors, je n'ai rencontré que quelques problèmes, principalement avec les opérateurs. Voici une partie du code pour instancier le tiroir lui-même. Android Studio ne génère aucune erreur, sauf lorsque j'utilise l'opérateur == sur les variables int et Long:
// Create the Drawer
result = DrawerBuilder()
.withSliderBackgroundColor(ContextCompat.getColor(applicationContext, R.color.top_header))
.withActivity(this)
.withToolbar(toolbar)
.withHasStableIds(true)
.withItemAnimator(AlphaCrossFadeAnimator())
.withAccountHeader(headerResult!!)
.addDrawerItems(
PrimaryDrawerItem().withName(R.string.drawer_item_profile).withIcon(FontAwesome.Icon.faw_user).withIdentifier(1).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_create).withIcon(FontAwesome.Icon.faw_Paint_brush).withIdentifier(2).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_yaanich_news).withIcon(FontAwesome.Icon.faw_newspaper_o).withIdentifier(3).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_my_groups).withIcon(FontAwesome.Icon.faw_users).withIdentifier(4).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog).withIdentifier(5).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke))
)
.withOnDrawerItemClickListener { view, position, drawerItem ->
if (drawerItem != null) {
var intent: Intent? = null
if (drawerItem.identifier == (1) {
intent = Intent(this, UserProfileActivity::class.Java)
} else if (drawerItem.identifier == 2) {
intent = Intent(this, YeetActivity::class.Java)
} else if (drawerItem.identifier == 3) {
intent = Intent(this, RssActivity::class.Java)
} else if (drawerItem.identifier == 4) {
intent = Intent(this, GroupsActivity::class.Java)
} else if (drawerItem.identifier == 5) {
intent = Intent(this, UserSettingsActivity::class.Java)
}
if (intent != null) {
this.startActivity(intent)
}
}
false
}
.withSavedInstance(savedInstanceState)
.withShowDrawerOnFirstLaunch(true)
.build()
RecyclerViewCacheUtil<IDrawerItem<*, *>>().withCacheSize(2).apply(result!!.recyclerView, result!!.drawerItems)
if (savedInstanceState == null) {
result!!.setSelection(21, false)
headerResult!!.activeProfile = profile
}
}
Erreurs:
if (drawerItem.identifier == (1)
if (drawerItem.identifier == 2)
Operator == cannot be applied to 'Long and' 'Int'
Utilisez simplement le long de votre côté droit
if (drawerItem.identifier == 1L)
Edit: la raison pour laquelle cela est nécessaire est que Kotlin ne promeut pas Ints en Longs (ou, plus généralement, n'élargit pas les types); sur le côté gauche, nous avons eu un Long et sur le côté droit, nous avons eu un Int, ce qui a conduit à l'erreur. Indiquant explicitement que le côté droit est un Long corrige l'erreur.
Par intérêt, une autre solution serait d'utiliser compareTo()
. compareTo renvoie zéro si les valeurs sont égales, négative si elle est inférieure à l'autre, ou positive si elle est supérieure à l'autre:
if(drawerItem.identifier.compareTo(1) == 0) "Equals"
si vous rencontrez un problème de <opérateur! = non appliqué à long et int> résolvez-le simplement en utilisant long sur votre côté droit, c'est-à-dire la valeur! = 1L c'est tout ..