Android: OnClick para el encabezado del cajón de navegación no funciona

Tengo un cajón de navegación en mi aplicación que contiene un encabezado y algunos elementos de la lista. El encabezado tiene un textview que quiero hacer clickable pero no soy capaz de hacerlo.

Para obtener el id de este textview utilicé el siguiente código, ya que está en un archivo de diseño diferente en comparación con el de la 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 casa. Necesito hacer clicable. El código anterior está en el método onCreate.

Para mí, otras respuestas no funcionaron. He intentado el código abajo. 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 de la cabecera, aquí he utilizado un lineallayout 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 } }); 

No olvides definir android:clickable="true" en tu TextView xml.

Sé que es tarde esto es para aquellos que enfrentan el mismo problema.

Coloque el diseño de encabezado en la vista de navegación como este

Esto es 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"/> 

Crear un diseño, el nombre de layout_header_profile.xml y poner el relleno lo que vista que desea.

 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 cabecera estará en su activity_main.xml solamente

Por lo que en MainActivity.java se puede declarar al hacer vistas desde activity_main.xml y realizar acciones en él, sin necesidad de código especial.

Hacer esto en su 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 Codificación feliz.

Sólo tiene que añadir esto a su archivo Xml de diseño de cabecera

 android:focusable="true" android:focusableInTouchMode="true" android:clickable="true" 

Vista de la primera cabecera de la cabecera

  View headerView = navigationView.getHeaderView(0); 

Y luego usa onClick Listener

  headerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // code } }); 
  • Protección contra el spam onclick ()
  • Obtener el id de una vista como String en el evento onClick
  • ¿Cómo implementar onclick en javascript y html para dispositivos con versiones inferiores de android?
  • Android one OnClick método para varios botones?
  • Vista no se puede resolver a un tipo
  • Android ListView con elementos que se pueden hacer clic en sus filas provoca problemas de desplazamiento continuo
  • Evento de clic transferido a la siguiente Actividad iniciada
  • Android: ¿Por qué el método onClick no funciona?
  • Cómo hacer clic o tocar en un texto de TextView
  • Adaptador personalizado para gridview en android
  • ¿Cómo hacer efecto bling en textview en clic?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.