2017-05-01 3 views
8

Je tente 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 jette pas d'erreur, sauf si j'utilise l'opérateur == sur les variables int et long:L'opérateur == ne peut pas être appliqué à 'Long' et 'Int' dans Kotlin

 // 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'

+2

Contrairement à Java, Kotlin ne fait pas automatiquement la promotion des nombres vers des types plus larges. Vous devez utiliser explicitement les mêmes types pour ces comparaisons. Franscesc a donné la bonne réponse, mais si votre int était stocké dans une variable, vous feriez 'if (drawerItem.identifier == id.toLong())'. –

Répondre

26

En utilisant simplement long sur votre droite

if (drawerItem.identifier == 1L) 
0

si vous face problème de < opérateur! = Non appliqué à long et int> le résoudre simplement à l'aide à long sur votre droite -à-dire de la valeur! = 1 L thats it ..