使新导航抽屉视图的 header 可点击

Make the header of the new navigation drawer view clickable

我的问题:

我有一个 MainActivity 及其 XML 文件 activity_main.xml ,其中包含一个 NavigationDrawer 视图,该视图调用一个 header.xml 文件显示在我的抽屉里。

问题是我的 header 文件包含一个按钮,所以当我单击 header 时它会打开一个站点。但是,自从将我的 Android studio 构建工具升级到 23.0.2 后,我的 MainActivity 中的按钮 onClick() 使应用程序崩溃,给我一个 NullPointerException.

我认为它崩溃是因为 header 文件与我的 activity_main.xml 完全不同,所以我的 MainActivity 无法直接访问 [=35] 中的视图=] 文件.

如何访问 header.xml 文件中的按钮并使其成为 clickable

您可以在 activity onCreate() 方法中设置 NavigationView 的 HeaderView,并为 header 视图设置监听器,例如:

yourNavigationView.addHeaderView(yourHeaderView);
yourHeaderView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Handle the click event
        }
    });

已解决:

NullPointerException 是由于包含我的 Button 的布局 (Header.xml) 不容易用于 MainActivity 的 xml 布局,因此 findViewById 将始终为空,因为对它来说,按钮不存在。通过将 header.xml 及其所有内容(特别是按钮)包含到 MainActivity.xml

的 NavigationView 中解决了这个问题

像这样:

<android.support.v4.widget.DrawerLayout ....>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<include
    android:id="@+id/toolbar"
    layout="@layout/tool_bar" />

....

</RelativeLayout>


<android.support.design.widget.NavigationView
...

<include
    layout="@layout/header" />

</android.support.v4.widget.DrawerLayout>