from - navigation drawer con fragments android studio
Android: el encabezado del cajón de navegación de OnClick no funciona (5)
Tengo un cajón de navegación en mi aplicación que contiene un encabezado y algunos elementos de la lista. El encabezado tiene una vista de texto que quiero hacer clic pero no puedo hacerlo.
Para obtener el ID de esta vista de texto, utilicé el siguiente código, ya que está en un archivo de diseño diferente al de setContentView en 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 contiene el encabezado del cajón de navegación. Tiene un artículo llamado hogar. Necesito hacer que se pueda hacer clic. El código anterior está en el método onCreate.
No olvides definir android:clickable="true"
en tu TextView xml.
Primera vista de encabezado de recuperación
View headerView = navigationView.getHeaderView(0);
Y luego use el oyente onClick
headerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// code
}
});
Sé que es tarde, esto es para aquellos que enfrentan el mismo problema.
Coloque el diseño de su encabezado en la vista de navegación como esta
esto está en 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"/>
cree un diseño, asígnele el nombre layout_header_profile.xml y llénelo lo que quiera que vea.
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>
entonces este archivo de diseño de encabezado estará solo en su activity_main.xml
así que en MainActivity.java puede declararlo mientras realiza vistas desde activity_main.xml y realizar acciones en él, no se requiere ningún código especial.
haz esto en tu 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();
}
});
Espero que funcione feliz codificación.
simplemente agregue esto a su archivo de diseño de encabezado Xml
android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
Para mí otras respuestas no funcionaron. He intentado el siguiente código. Sé que es demasiado tarde. Espero que esto ayude a algunos.
Lo que hice para acceder a la vista de cabecera.
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")
Para hacer clic en las vistas del encabezado, aquí he usado una distribución lineal de headerview
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);
}
});
O
headerview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Your code here
}
});