Comment modifier le texte d'un TextView dans la navigation de tiroir en-tête?
Je veux modifier le texte d'un TextView à l'intérieur de la navigation tiroir d'en-tête. Mais j'ai cette erreur:
java.lang.NullPointerException: Tentative d'invoquer la méthode virtuelle " void
android.widget de.TextView.setText(java.lang.CharSequence) " sur une valeur null
référence de l'objet
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
nav_header_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/slide_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<ImageView
android:id="@+id/tvHeaderIcon"
android:layout_width="60dp"
android:layout_height="60dp"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:src="@android:drawable/sym_def_app_icon" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:id="@+id/tvHeaderName"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java
TextView tvHeaderName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvHeaderName= (TextView) findViewById(R.id.tvHeaderName);
tvHeaderName.setText("Saly");
}
Comment puis-je faire cela?
Vous devez vous connecter pour publier un commentaire.
Utilisation getHeaderView on votre la fenêtre des éléments
TextView
dans un tiroir de navigation en-tête, utilisez ce code dans leActionBarDrawerToggle.onDrawerOpened()
de la méthode. Voir: stackoverflow.com/a/35952939/1657502.Vous devez gonfler votre mise en page d'en-Tête de la fenêtre des éléments de la première...
Vous pouvez aussi les utiliser de 23.1.1 d'aide à la conception de la bibliothèque
Référence: https://stackoverflow.com/a/33692431/2761923
Ici est la Kotlin version du code, j'espère que ça aide quelqu'un là-bas.
L'utiliser pour obtenir l'en-tête de navigation
View hview = navigationView.getHeaderView(0);
puis utilisez le hview pour obtenir différentes vues d'en-tête de navigation et de faire ce que vous voulez
autre personne à l'aide de
navHeaderView= navigationView.inflateHeaderView(R.layout.nav_header_main);
c'est la création d'une nouvelle tête à l'indice 1.D'abord, nous devons obtenir de l'instance de navigation en gonflant la navigation à vue dans une vue varible, plus tard, vous pouvez obtenir le textView exemple pour modifier le textview
Ce qui a fonctionné pour moi? son présent:-
Mais n'oubliez pas de supprimer ce à partir de votre fichier xml j'.e à partir de la fenêtre des éléments :-
app:headerLayout="@layout/nav_header_main"
Ok en dehors de cette réponse ci-dessus..au fil des mois j'ai maintenant compris il y a une meilleure façon de le faire si vous êtes suffisamment avancé dans le développement android!!Mettez juste la structure du châssis il y a de charge et de fragment de l'intérieur qui nous ont Recyclerview et de la section d'en-tête. Avec Recyclerview Vous pouvez configurer l'en-tête comme vous le souhaitez avec textviews,de l'image,et beaucoup plus que vous le souhaitez. L'application récente, je suis en train de travailler sur fait que.Dynamiquement des données passées en Recyclerview de fragmentactivity avec des icônes et aussi mettre une relative mise en page(à l'intérieur de textviews et imageview) qui sert d'en-tête en haut de Recyclerview.
Vous avez besoin pour obtenir la fenêtre des éléments de l'id dans votre Activité de ce genre
Maintenant obtenir HeaderView Mise en page à l'aide de la fenêtre des éléments de l'id comme ceci
Maintenant vous pouvez obtenir une vue de l'id et réaliser l'action que vous voulez exemple
Cela a fonctionné pour moi: