studio from fragments ejemplo con activity android onclick navigation-drawer

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 } });