fragment android:onclick,Android Fragment的布局中使用android:onClick 属性时需要注意的问题...
问题:
下面是一个在fragment的布局中定义的一个点击事件
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:onClick="onMessageViewClick"
android:clickable="true"
android:focusable="true" />
按照常规操作,我们需要在宿主中定义一个名为 onMessageViewClick 的public 方法
public void onMessageViewClick(View v) {
dosomething...
}
这样看起来没什么问题,但是跑起来直接报错:
java.lang.IllegalStateException: Could not find method xxx in a parent or ancestor Context for android:onClick attribute defined on view class
解决方法:
在持有fragment的activity中定义改方法即可
原因分析:
1.报错信息:无法在对应的context中找到名为 onMessageViewClick 的方法(其实这里已经说的很明白了,找不到方法,在view的context中)
那看一下当我们点击view的时候系统是怎么寻找对应的方法的:
直接上截图,下面是view类中的一个内部类
image.png
看一下属性就明白这个类似干什么的了(膜拜)
mHostView:定义了onClick属性的view
mMethodName:方法名称
mResolvedContext:反射对象
mResolvedMethod:反射方法
所以view是通过反射的方式来调用方法的(大家应该不看源码都知道的),这里的mResolvedContext 是通过View.getContext获取的
image.png
那么,view的context中为什么找不到方法呀,我都定义了不是吗。但是,注意一下,我们定义的方法是在Fragment中,fragment,fragment是context吗?当然不是,看看fragment class的定义
image.png
fragment有生命周期,是视图的管理者,并不是context,所以你把方法定义在fragment中系统当然找不到。
那么view的context是谁呢?fragment的使用范围里,除了activity是Context外还有谁呢(滑稽)。
fragment android:onclick,Android Fragment的布局中使用android:onClick 属性时需要注意的问题...相关推荐
- 详解Android布局中gravity与layout_gravity属性
在android布局中,我们经常会用到"重心"-gravity这个属性.但是gravity有不同的类型: gravity layout_gravity 相对布局中的layout_c ...
- Android布局中涉及的一些属性
Android:gravity属性 线性布局常见的就是利用LinearLayout进行布局,其中有个比较重要的属性就是android:gravity,在官方文档中是这么描述这个属性的:指定一个元素怎么 ...
- Android性能优化系列之布局优化,Android程序员校招蚂蚁金服
25 26 rInflate方法关键代码 void rInflate(XmlPullParser parser, View parent, Context context, AttributeSet ...
- Android开发学习:在Eclipse中导入Android项目方法
在Eclipse中导入Android项目方法的具体步骤如下: 1.启动Eclipse,依次选择File---Import,如下图所示: 2.在弹出的Import窗口中选择Existing Projec ...
- linux android build tools,build.gradle 文件中的 Android SDK Build Tools version
build.gradle 文件中的 Android SDK Build Tools version Android,Gradle,SDK 2018.07.17 在 Android Gradle Plu ...
- Android驱动(1)---Ubuntu中为Android系统上编写Linux内核驱动程序实现方法
Ubuntu中为Android系统上编写Linux内核驱动程序实现方法 本文主要介绍在Ubuntu 上为Android系统编写Linux内核驱动程序, 这里对编写驱动程序做了详细的说明,对研究Andr ...
- 【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )
文章目录 一.列举 build.gradle 中常用 android 模块配置 二.android 模块常用配置介绍 1.compileSdkVersion 配置 2.buildToolsVersio ...
- chrome怎么运行Android程序,ARCVM:Chrome OS 中运行 Android 应用程序的新方式
三星可翻转 Chromebook 在过去几年中,许多 Chromebook 都可以安装 Play 商店并运行 Android 应用.这为 Chromebook 打开了新的大门,使其不仅仅是美化的网络浏 ...
- 【Android 开发入门】我认识中的Android
2014年12月从csdn专家福利获得的一本书<Android游戏开发技术实战详解>,尘封了一年多的时间,今天才翻开来看. 我认识中的Android,提到Android最先浮现在我脑海中的 ...
最新文章
- 翼方健数曹华:构建数据和计算互联网的必由之路
- python tcp服务器 多线程_Python中的多线程TCP服务器
- python3 gzip 压缩/解压
- python七:编码
- 2020年首届算法竞赛网络挑战赛直播讲解课程
- python正则匹配html标签_Python正则获取、过滤或者替换HTML标签的方法
- 如何用Pygame写游戏(十五)
- (转)C++优先队列中元素及结构体的排序
- Android 性能优化案例
- Struts2学习(二):第一个Action
- cxf打印报文日志_使用线程池实现异步打日志和存库的任务调度
- 全中国加油:Github 开源了新型肺炎防疫项目,一起助力
- 同志,云原生了解一下?
- css单线边框_css中的border-collapse属性如何设置表格边框线?(代码示例)
- ue4 ui 序列图_UE4入门之路(UI篇):UMG系统介绍
- php生成数字订单号,php生成订单号函数
- Git内部原理之深入解析环境变量
- 关闭springboot健康检查 org.springframework.boot.actuate.health.AbstractHealthIndicator 89 health - Elastic
- 如何查看主机名和IP地址
- windows phone 7---8 Belling's课堂(十五) 程序等待页面的处理