web-dev-qa-db-ja.com

OnClick forナビゲーションドロワーヘッダーが機能しない

アプリにナビゲーションドロワーがあり、そこにはヘッダーといくつかのリストアイテムが含まれています。ヘッダーには、クリック可能にするテキストビューがありますが、できません。

このテキストビューのIDを取得するには、onCreateのsetContentViewのレイアウトファイルとは異なるレイアウトファイルにあるため、次のコードを使用しました。

    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には、ナビゲーションドロワーのヘッダーが含まれています。 homeという名前のアイテムがあります。クリック可能にする必要があります。上記のコードはonCreateメソッドにあります。

22
varunkr

私にとっては他の回答は機能しませんでした。私は以下のコードを試しました。遅すぎることはわかっています。これが助けになることを願っています。

ヘッダーのビューにアクセスするために私がしたこと。

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")

ヘッダーのビューをクリックするために、ここでheaderviewのlinearlayoutを使用しました

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

または

 headerview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           // Your code here 
        }
    });
86

TextView xmlでAndroid:clickable="true"を定義することを忘れないでください。

0
frgnvola

これは同じ問題に直面している人たちのために遅いことを知っています。

このようにナビゲーションビューにヘッダーレイアウトを配置します

これは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"/>

レイアウトを作成し、layout_header_profile.xmlという名前を付けて、必要なビューを埋めます。

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>

このヘッダーレイアウトファイルはactivity_main.xmlのみにあります

mainActivity.Javaでは、activity_main.xmlからビューを作成するときに宣言し、アクションを実行できます。特別なコードは不要です。

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

うまくいけば、ハッピーコーディングができます。

0
Irfan

これをヘッダーレイアウトのXmlファイルに追加するだけです

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

最初のフェッチヘッダービュー

 View headerView = navigationView.getHeaderView(0);

そして、onClick Listenerを使用します

  headerView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            // code
        }
    });
0
ANUJ GUPTA