OnClick导航抽屉标题不起作用

时间:2015-07-30 05:49:56

标签: android onclick navigation-drawer

我的应用中有一个导航抽屉,其中包含标题和一些列表项。标题有一个textview,我想让它可点击,但我无法做到。

要获取此textview的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方法中。

6 个答案:

答案 0 :(得分:84)

对我来说,其他答案都没有用。 我试过下面的代码。 我知道为时已晚。希望这会有所帮助。

我访问了标题视图。

/etc

单击标题的视图,这里我使用了headerview的线性布局

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

或者

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

答案 1 :(得分:1)

尝试这样

    navigationView.getHeaderView(0).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // your code here.....
        }
    });

答案 2 :(得分:0)

不要忘记在TextView xml中定义android:clickable="true"

答案 3 :(得分:0)

我知道这是针对那些面临同样问题的人。

将标题布局放在导航视图中,如下所示

这是在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="Irfan55121@gmail.com"
            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();
        }
    });

希望它能有效编码。

答案 4 :(得分:0)

只需将其添加到标题布局Xml文件

即可
df[,3] <- ifelse(df[,1] < df[,2], df[,1],df[,2])

答案 5 :(得分:0)

首先获取标题视图

 View headerView = navigationView.getHeaderView(0);

然后使用onClick Listener

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

            // code
        }
    });