问题:

下面是一个在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 属性时需要注意的问题...相关推荐

  1. 详解Android布局中gravity与layout_gravity属性

    在android布局中,我们经常会用到"重心"-gravity这个属性.但是gravity有不同的类型: gravity layout_gravity 相对布局中的layout_c ...

  2. Android布局中涉及的一些属性

    Android:gravity属性 线性布局常见的就是利用LinearLayout进行布局,其中有个比较重要的属性就是android:gravity,在官方文档中是这么描述这个属性的:指定一个元素怎么 ...

  3. Android性能优化系列之布局优化,Android程序员校招蚂蚁金服

    25 26 rInflate方法关键代码 void rInflate(XmlPullParser parser, View parent, Context context, AttributeSet ...

  4. Android开发学习:在Eclipse中导入Android项目方法

    在Eclipse中导入Android项目方法的具体步骤如下: 1.启动Eclipse,依次选择File---Import,如下图所示: 2.在弹出的Import窗口中选择Existing Projec ...

  5. 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 ...

  6. Android驱动(1)---Ubuntu中为Android系统上编写Linux内核驱动程序实现方法

    Ubuntu中为Android系统上编写Linux内核驱动程序实现方法 本文主要介绍在Ubuntu 上为Android系统编写Linux内核驱动程序, 这里对编写驱动程序做了详细的说明,对研究Andr ...

  7. 【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )

    文章目录 一.列举 build.gradle 中常用 android 模块配置 二.android 模块常用配置介绍 1.compileSdkVersion 配置 2.buildToolsVersio ...

  8. chrome怎么运行Android程序,ARCVM:Chrome OS 中运行 Android 应用程序的新方式

    三星可翻转 Chromebook 在过去几年中,许多 Chromebook 都可以安装 Play 商店并运行 Android 应用.这为 Chromebook 打开了新的大门,使其不仅仅是美化的网络浏 ...

  9. 【Android 开发入门】我认识中的Android

    2014年12月从csdn专家福利获得的一本书<Android游戏开发技术实战详解>,尘封了一年多的时间,今天才翻开来看. 我认识中的Android,提到Android最先浮现在我脑海中的 ...

最新文章

  1. 翼方健数曹华:构建数据和计算互联网的必由之路
  2. python tcp服务器 多线程_Python中的多线程TCP服务器
  3. python3 gzip 压缩/解压
  4. python七:编码
  5. 2020年首届算法竞赛网络挑战赛直播讲解课程
  6. python正则匹配html标签_Python正则获取、过滤或者替换HTML标签的方法
  7. 如何用Pygame写游戏(十五)
  8. (转)C++优先队列中元素及结构体的排序
  9. Android 性能优化案例
  10. Struts2学习(二):第一个Action
  11. cxf打印报文日志_使用线程池实现异步打日志和存库的任务调度
  12. 全中国加油:Github 开源了新型肺炎防疫项目,一起助力
  13. 同志,云原生了解一下?
  14. css单线边框_css中的border-collapse属性如何设置表格边框线?(代码示例)
  15. ue4 ui 序列图_UE4入门之路(UI篇):UMG系统介绍
  16. php生成数字订单号,php生成订单号函数
  17. Git内部原理之深入解析环境变量
  18. 关闭springboot健康检查 org.springframework.boot.actuate.health.AbstractHealthIndicator 89 health - Elastic
  19. 如何查看主机名和IP地址
  20. windows phone 7---8 Belling's课堂(十五) 程序等待页面的处理

热门文章

  1. HEVC编码技术简介
  2. 安装snipe-IT遇到的php问题
  3. 京东价格监控软件开发技术探讨十四:电商领域区块链融合模式采集的探讨
  4. Python_封装案例(士兵突击)
  5. Android 百度地图应用定位经纬度返回4.9E-324有关问题
  6. [sphinx]中文语言模型训练
  7. 创业公司路演PPT模板
  8. 三个和尚比身高,已告知三个和尚的身高
  9. 软件测试工作的目的和原则是什么?
  10. Micro Surface Pro 鼠标一直闪烁的问题