Navigation Afficher la forme d'en-tête de trouver / trouver

Dans mon NavigationView, j'ai une disposition d'en-tête avec id 'viewId' avec des boutons actifs. Pour configurer ces boutons, je fais ce qui suit dans l'activité onPostCreate :

 final View panel = findViewById(R.id.viewId); panel.setOnClickListener(new View.OnClickListener() { ... setup goes here ... }); 

Avec la nouvelle version de la bibliothèque de support Android, ( 23.1.0 ), la vue ne peut pas être trouvée, elle renvoie null. Avec les versions précédentes, cela a bien fonctionné. Est-ce un bug ou est-ce que j'utilise cette fonctionnalité mal? Dans l'affirmative, comment accéder à la mise en page de l'en-tête et y ajouter un comportement?

  • Effectuer un appel à l'aide d'une carte SIM spécifiée dans un périphérique SIM double
  • StrictMode + Analytics
  • Le code de déverrouillage visage dans le projet open source Android?
  • Gérer la navigation de la barre d'outils et le bouton arrière du fragment dans Android
  • Aucun HttpMessageConverter approprié n'a été trouvé lors de l'exécution d'une requête de repos
  • Quel est le but de la classe Applicaton dans Android
  • Qu'est-ce que Android PDK?
  • Comment utiliser Git sur Android?
  • Les éléments de forme Android ont des tailles différentes sur différents émulateurs
  • Détection lorsque les boutons système sont visibles lors de l'utilisation du mode "immersive"
  • Comment envoyer une requête HTTP dans l'application Android pour accéder à l'API REST
  • Peut souligner les mots dans le texte TextView
  • 4 Solutions collect form web for “Navigation Afficher la forme d'en-tête de trouver / trouver”

    La version 23.1.0 permet de visualiser la NavigationView à l'aide d'un RecyclerView (plutôt que de ListView précédent) et l'en-tête est ajouté comme l'un de ces éléments. Cela signifie qu'il n'est pas disponible instantanément pour appeler findViewById() – une findViewById() mise en page est nécessaire avant d'être attachée à NavigationView .

    Pour la version 23.1.1 de la bibliothèque de support, vous pouvez maintenant obtenir une référence à la vue d'en-tête à l'aide de getHeaderView() :

     View headerLayout = navigationView.getHeaderView(0); // 0-index header 

    Cela a l'avantage de travailler sur les en-têtes ajoutés via XML et via le code.

    Si vous utilisez encore 23.1.0, selon le bug associé , vous pouvez gonfler l'en-tête dans le code et utiliser findViewById() sur cela:

     View headerLayout = navigationView.inflateHeaderView(R.layout.navigation_header); panel = headerLayout.findViewById(R.id.viewId); // panel won't be null 

    Jusqu'à ce que vous passiez à 23.1.1.

    Maintenant, avec la version 23.1.1 de la bibliothèque de support de conception, vous pouvez utiliser

     NavigationView navigationView = (NavigationView) findViewById(R.id.your_nav_view_id); View header = navigationView.getHeaderView(0) TextView text = (TextView) header.findViewById(R.id.textView); 

    Pour moi, c'était la même situation avec 23.1.0, après la mise à jour, l'exception du pointeur nul est devenue. Dans ce cas, NavigatorView ressemble à:

      <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header" app:menu="@menu/menu_nav" /> 

    J'ai essayé la proposition de solution par ianhanniballake mais ça ne marche pas. Ensuite, j'ai gonflé avec la phrase:

      LayoutInflater.from(getContext()).inflate(R.layout.nav_header, mNavigationView); 

    Après cela, je peux trouver par id toutes les vues définies dans nav_heard.

    C'est ainsi que je l'ai fait en utilisant ButterKnife et cela fonctionne pour moi.

     protected static class HeaderViewHolder { @BindView(R.id.button) Button button; HeaderViewHolder(View view) { ButterKnife.bind(this, view); } } 

    Et utilisez ensuite ce titulaire de la vue comme ceci:

     View header = navigationView.getHeaderView(0); headerViewHolder = new HeaderViewHolder(header); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.