NavigationView的点击事件失效原因和解决方案
来源:互联网 发布:得力考勤机删除数据 编辑:程序博客网 时间:2024/05/29 13:28
最近在看一个开源项目的源码, 于是乎想着仿照一下, 自己做一个页面的框架出来, 结果 ,也不知道是这么一回事, 我的Navigation 刚开始点击事件是正常的, 但是, 不知道的...就失效了.....肯定有什么不对!
布局代码是这样的: DrawerLayout + Navigation + CoordinatorLayout
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"
>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
/>
<!-- 这里include的布局是CoordinatorLayout -->
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</android.support.v4.widget.DrawerLayout>
乍一看感觉是没毛病的, 但是, nv里面的控件所有点击事件全部都失效了, 明明之前是可以的, 但是就是不知道修改了什么, 就是解决不了, 后来无奈只好重新创建一个工程, 结果nv点击事件是正常的, 我又细细检查了一遍, 终于发现了: 原来我的nv放在了CoordinatorLayout的上面了.....我想, 原因可能是因为CoordinatorLayout这个控件的上下滑动伸缩的效果, 必须保证自己处于布局最上面...所以, 正确的代码应该是这样的:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"
>
<!-- 这里include的布局是CoordinatorLayout -->
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<!-- 注意 nv必须在CoordinatorLayout下面 否则nv点击事件失效 -->
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
/>
</android.support.v4.widget.DrawerLayout>
为此写一个小小的文章, 为自己也为后人留下一个方便的解决途径
附:
另外, 顺便写一下nv点击事件的写法 , nv由header+menu组成 , 如果你想实现header里面的控件的点击事件 , 一般的view v = nv.findviewxxxx, v.setOnClickxxxxx 是不行的! 正确的代码应该是这样:
情形1:
你在布局里面的代码跟我的一样, nv里面添加了app:headerLayout 属性, 那么, 代码是这样的:
View headerView = nv.getHeaderView(0);
headerView.findViewById(R.id.nv_header_name).setOnClickListener(this);
情形2:
如果你在header里面没有添加 app:headerLayout 属性, 那么, 代码是这样的:
View headerView= nv.inflateHeaderView(R.layout.你的header);
headerView.findViewById(R.id.nv_header_name).setOnClickListener(this);
- NavigationView的点击事件失效原因和解决方案
- ListView点击事件失效的解决方案
- NavigationView 中 获得headerView 的点击事件
- android,NavigationView的点击事件无响应
- Searchview搜索框点击事件失效解决方案
- DrawerLayout中菜单栏和主界面点击失效的原因
- Xcode 代码提示失效的原因和解决方案
- listView的点击事件失效处理、和其属性
- ListView item点击事件和里面的控件冲突失效
- NavigationView获取头像点击事件
- NavigationView获取头像点击事件
- Listview中布局控件导致点击事件失效的原因分析
- NavigationView中获取headerLayout实现点击事件的方法
- DrawerLayout抽屉布局item点击事件失效原因之一
- Button点击事件和LIstview子控件点击事件失效
- listview点击失效原因
- AbInnerViewPager修复滑动失效和点击事件
- js点击事件在ios中失效的3种解决方案
- ASP.NET Core之跨平台的实时性能监控(2.健康检查)
- 我眼中的ASP.NET Core之微服务
- 微服务中的异步消息通讯
- .NET Core 事件总线,分布式事务解决方案:CAP
- AOP in dotnet :AspectCore的参数拦截支持
- NavigationView的点击事件失效原因和解决方案
- .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
- ASP.NET Core MVC 过滤器介绍
- Autofac+Castle实现AOP事务
- .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
- .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
- ASP.NET Core 开源论坛项目 NETCoreBBS
- docker学习之-docker mac安装
- Visual Studio Code: 利用 MSSQL 插件创建数据库 IDE