java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setTextColor(android.content.res.ColorStateList)' on a null object reference
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)@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.