Ich habe in meiner App eine Navigationsleiste, die eine Kopfzeile und einige Listenelemente enthält. Die Kopfzeile hat eine Textansicht, die ich anklickbar machen möchte, aber ich kann es nicht.
Um die ID dieser Textansicht zu erhalten, habe ich den folgenden Code verwendet, da er sich in einer anderen Layoutdatei befindet als in setContentView in 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 enthält die Kopfzeile der Navigationsleiste. Es hat einen Artikel namens home. Ich muss es anklickbar machen. Der obige Code befindet sich in der onCreate-Methode.
Für mich funktionierten andere Antworten nicht. Ich habe den folgenden Code ausprobiert . Ich weiß, es ist zu spät. Hoffe das hilft einigen.
Was ich getan habe, um auf die Ansicht des Headers zuzugreifen.
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")
zum Anklicken der Kopfansichten habe ich hier eine lineare Darstellung der Kopfansicht verwendet
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);
}
});
Oder
headerview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Your code here
}
});
Vergessen Sie nicht, Android:clickable="true"
in Ihrer TextView-XML zu definieren.
ich weiß, es ist spät für diejenigen, die das gleiche Problem haben.
platzieren Sie Ihr Kopfzeilenlayout so in der Navigationsansicht
dies ist in 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"/>
erstellen Sie ein Layout, benennen Sie es als layout_header_profile.xml und geben Sie die gewünschte Ansicht ein.
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>
dann befindet sich diese Header-Layout-Datei nur in Ihrer activity_main.xml
so können Sie es in Ihrer MainActivity.Java wie Ansichten aus activity_main.xml deklarieren und Aktionen ausführen, es ist kein besonderer Code erforderlich.
mach das in deinem 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();
}
});
Hoffe, es funktioniert Happy Coding.
fügen Sie dies einfach Ihrer Header-Layout-XML-Datei hinzu
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:clickable="true"
Erste Header-Ansicht abrufen
View headerView = navigationView.getHeaderView(0);
Und dann onClick Listener verwenden
headerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// code
}
});