La fenêtre des éléments d'obtenir/trouver en-tête de disposition
Dans mon la fenêtre des éléments, j'ai un en-tête de mise en page avec l'id 'viewId' avec boutons actifs. Pour l'installation de ces boutons, je ne le suit dans l'activité de onPostCreate
:
final View panel = findViewById(R.id.viewId);
panel.setOnClickListener(new View.OnClickListener() {
... setup goes here ...
});
Avec la nouvelle version android support library, (23.1.0), le point de vue ne peut être trouvé, elle renvoie null. Avec les versions précédentes, elle a bien fonctionné. Est-ce un bug ou suis-je à l'aide de cette fonctionnalité de mal? Si oui, comment accéder à l'en-tête de mise en page et ajouter un comportement à elle?
- La meilleure solution dans ce post: stackoverflow.com/questions/31241683/...
InformationsquelleAutor khusrav | 2015-10-18
Vous devez vous connecter pour publier un commentaire.
Version 23.1.0 commutateurs
NavigationView
à l'aide d'unRecyclerView
(plutôt que de la précédenteListView
) et l'en-tête est ajouté en tant que l'un de ces éléments. Cela signifie qu'il n'est pas immédiatement disponible à l'appelfindViewById()
- une passe de mise en page est nécessaire avant qu'il soit attaché à laNavigationView
.Pour version 23.1.1 de la Bibliothèque de prise en charge, vous pouvez maintenant obtenir une référence à la vue d'en-tête à l'aide de
getHeaderView()
:Cela a l'avantage de travailler sur les en-têtes ajoutés via XML et via le code.
Si vous êtes toujours à l'aide de 23.1.0, comme par le problème de, vous pouvez gonfler la tête dans le code et l'utilisation
findViewById()
sur que:Jusqu'à ce que vous vous déplacez à 23.1.1.
OnLayoutChangeListener
nécessite min sdk niveau 11, mais j'ai 9 dans mon application. Des idées s'il vous plaît, comment contournerfindViewById
retournull
pourNavigationView
en-tête?inflate(R.layout.lay_header, null);
sera la cause de tous leslayout_
attributs pour être ignoré, alors que cette solution ne fonctionne pas) et accomplit le même résultat.inflateHeaderView
, elle attache la Vue pour vous dans la bonne couche dans leRecyclerView
avec la bonne mère - quelque chose que vous ne pouvez pas faire de l'extérieur àNavigationView
.getHeaderView(0)
.. je pensais que le 0 de l'index de la Vue, mais il est évident qu'il ne l'est pas, merci.Maintenant avec le 23.1.1 sortie de la conception de support de la bibliothèque, vous pouvez utiliser
navigationView.getHeaderCount()
dans le cas où vous avez plus de 1 en-tête pour quelque raison que ce soit.C'est la façon dont je l'ai fait à l'aide de
ButterKnife
et cela fonctionne pour moi.et ensuite utiliser cette vue titulaire comme ceci :
Pour moi, c'était la même situation avec 23.1.0, après de mise à jour de l'exception de pointeur null devenir. Dans ce cas, le
NavigatorView
ressembler à:J'ai essayé la proposition de solution par ianhanniballake mais il ne fonctionne pas. Ensuite, j'ai gonflé avec la phrase:
Après cela, je peux le trouver par l'id de toutes les vues définies dans
nav_heard
mise en page .