J'ai un tiroir de navigation dans mon application qui contient un en-tête et des éléments de liste. L'en-tête a un textview que je veux rendre cliquable mais je ne suis pas capable de le faire.
Pour obtenir l'id de cette textview, j'ai utilisé le code suivant, car il se trouve dans un fichier de disposition différent de celui de setContentView dans onCreate.
final LayoutInflater factory = getLayoutInflater();
final View textEntryView = factory.inflate(R.layout.header, null);
TextView home = (TextView) textEntryView.findViewById(R.id.home);
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(curr_context, "SHOW", Toast.LENGTH_LONG).show();
}
});
header.xml contient l'en-tête du tiroir de navigation. Il a un article nommé maison. J'ai besoin de le rendre cliquable. Le code ci-dessus est dans la méthode onCreate.
Pour moi, d'autres réponses n'ont pas fonctionné. J'ai essayé le code ci-dessous . Je sais qu'il est trop tard. J'espère que cela aidera certains.
Ce que j'ai fait pour accéder à la vue d'en-tête.
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
View headerview = navigationView.getHeaderView(0);
TextView profilename = (TextView) headerview.findViewById(R.id.prof_username);
profilename.setText("your name")
pour cliquer sur les vues d'en-tête, j'ai utilisé ici une représentation linéaire de la vue d'ensemble
LinearLayout header = (LinearLayout) headerview.findViewById(R.id.header);
header.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(HomeActivity.this, "clicked", Toast.LENGTH_SHORT).show();
drawer.closeDrawer(GravityCompat.START);
}
});
Ou
headerview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Your code here
}
});
N'oubliez pas de définir Android:clickable="true"
dans votre XML TextView.
je sais qu'il est tard c'est pour ceux qui font face au même problème.
placez votre disposition d'en-tête dans la vue de navigation comme ceci
c'est dans activity_main.xml
<Android.support.design.widget.NavigationView
Android:id="@+id/navigationView"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_gravity="start"
Android:layout_marginTop="-24dp"
app:itemTextColor="@color/black"
app:headerLayout="@layout/layout_header_profile"
app:menu="@menu/nav_menu"/>
créez une mise en page, nommez-la layout_header_profile.xml et remplissez-la comme vous le souhaitez.
layout_header_profile.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="178dp"
Android:orientation="vertical"
Android:weightSum="1"
>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="56dp"
Android:layout_alignParentBottom="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true"
Android:orientation="vertical">
<TextView
Android:id="@+id/id_user_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="16dp"
Android:text="Irfan"
Android:textSize="14sp"
Android:textStyle="bold"
/>
<TextView
Android:id="@+id/id_user_email"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="16dp"
Android:layout_marginTop="5dp"
Android:text="[email protected]"
Android:textSize="14sp"
Android:textStyle="normal"
/>
</LinearLayout>
<ImageView
Android:id="@+id/id_profile_image"
Android:layout_width="70dp"
Android:layout_height="70dp"
Android:layout_marginLeft="16dp"
Android:layout_marginTop="38dp"
Android:src="@mipmap/ic_profile_pic"
/>
</RelativeLayout>
alors ce fichier de disposition d'en-tête sera dans votre activity_main.xml uniquement
ainsi, dans votre MainActivity.Java, vous pouvez le déclarer comme vous visualisez à partir de activity_main.xml et y exécuter des actions. Aucun code spécial n'est requis.
faites comme ça dans votre onCreate ()
TextView tvUserName = (TextView) findViewById(R.id.id_user_name);
tvUserName.setText("My Name");
tvUserName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getBaseContext(),"clicking textview",Toast.LENGTH_LONG).show();
}
});
J'espère que cela fonctionne Code heureux.
il suffit d'ajouter ceci à votre fichier XML d'en-tête
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:clickable="true"
Première vue d'en-tête de récupération
View headerView = navigationView.getHeaderView(0);
Et puis utilisez onClick Listener
headerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// code
}
});