Materialdrawer: Problème avec l'application instantanée

Créé le 18 nov. 2018  ·  3Commentaires  ·  Source: mikepenz/MaterialDrawer

À propos de cette question

  • Tout d'abord, merci d'avoir créé une belle bibliothèque
  • J'ai créé un DrawerItem comme OverflowMenuDrawerItem dans l'exemple, cela fonctionne parfaitement dans l'application installée mais bindViewHelper(viewHolder) provoque NullPointerException dans l'application instantanée.
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setTextColor(android.content.res.ColorStateList)' on a null object reference
  • Il s'est écrasé dans viewHolder.name.setTextColor(selectedTextColor); dans BaseDescribeableDrawerItem lors de l'appel à bindViewHelper(viewHolder). Lorsque j'essaye de le cathéter, l'application instantanée peut démarrer normalement (mais l'élément de tiroir n'a pas de nom et de description)
  • Ma classe utilisant la même disposition que l'exemple
    myclass

Des détails

  • langue kotlin
  • Tiroir à matériaux 6.1.1
  • Prise en charge de la version 1.0.0 de la bibliothèque (AndroidX)
  • Outils de construction Gradle version 28.0.3
  • Android Studio version 3.2.1 (Stable)
question

Tous les 3 commentaires

@sonhvp désolé pour la réponse tardive.

Je ne sais pas comment cela pourrait être un problème de la bibliothèque :/.
La bibliothèque utilise des mises en page normales, et accède aux vues de la mise en page via leur identifiant. comme il est censé être.

cela pourrait-il être un problème avec la configuration de l'application instantanée ? le tiroir n'est pas dans le bon module et n'est pas expédié ?

ou votre article est dans le mauvais module et manque la mise en page ? ou tel ?

Après avoir testé plusieurs fois. Je ne pense pas que la bibliothèque soit la cause du crash. Comme vous l'avez mentionné, la bibliothèque utilise des mises en page normales et accède aux vues de la mise en page via leur identifiant. J'ai vérifié et testé tellement de fois mais je ne comprends pas pourquoi. Je pense que la fonctionnalité d'application instantanée a quelque chose qui ne va pas. Si vous voulez voir le problème, vous pouvez consulter mon référentiel de test : https://github.com/sonhvp/test_project.
Merci pour votre aide.

@sonhvp donc je crois que j'ai compris ce qui se passe ici.

Ainsi, les identifiants des materialDrawer sont dans la classe com.mikepenz.materialdrawer.R . Alors que vos identifiants sont dans la classe com.sonhvp.test . Ainsi, lorsque vous utilisez ensuite votre propre fichier xml , les identifiants sont dans votre espace de noms, mais le BaseViewHolder essaie de trouver les identifiants dans l'espace materialdrawer noms

Pour résoudre le problème, ajoutez simplement :

        init {
            this.icon = view.findViewById(R.id.material_drawer_icon)
            this.name = view.findViewById(R.id.material_drawer_name)
            this.description = view.findViewById(R.id.material_drawer_description)
        }

à votre ViewHolder dans le OverflowMenuDrawerItem (assurez-vous qu'il s'agit du R de votre forfait)


Si je ne me trompe pas, cela fonctionne pour l'application car les champs R pour les identifiants sont toujours fusionnés, et les mêmes identifiants sont simplement fusionnés et seront le même identifiant. Alors que pour les applications instantanées, cela ne se produit pas. (du moins c'est mon hypothèse)

De plus, je pense que le plan de Google est d'avoir la même chose pour les modules normaux à un moment donné dans le futur. l'espacement des noms de tous les identifiants et mises en page et les empêche d'être écrasés à partir d'un module différent.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

fuentepa picture fuentepa  ·  3Commentaires

Ahmed-Emad picture Ahmed-Emad  ·  4Commentaires

singhalavi picture singhalavi  ·  4Commentaires

Erwinstein picture Erwinstein  ·  3Commentaires

HanderWei picture HanderWei  ·  3Commentaires