wake-up-neo.com

Android: OnClick für Navigations-Header funktioniert nicht

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.

20
varunkr

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

Vergessen Sie nicht, Android:clickable="true" in Ihrer TextView-XML zu definieren.

0
frgnvola

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.

0
Irfan

fügen Sie dies einfach Ihrer Header-Layout-XML-Datei hinzu

Android:focusable="true"
Android:focusableInTouchMode="true"
Android:clickable="true"
0
Nakhoda Sokoot

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
        }
    });
0
ANUJ GUPTA