第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android Fragment的布局中使用android:onClick 屬性時需要注意的問題

標簽:
Android

问题:

下面是一个在fragment的布局中定义的一个点击事件

<ImageView
           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类中的一个内部类


webp

image.png


看一下属性就明白这个类似干什么的了(膜拜)
mHostView:定义了onClick属性的view
mMethodName:方法名称
mResolvedContext:反射对象
mResolvedMethod:反射方法

所以view是通过反射的方式来调用方法的(大家应该不看源码都知道的),这里的mResolvedContext 是通过View.getContext获取的


webp

image.png


那么,view的context中为什么找不到方法呀,我都定义了不是吗。但是,注意一下,我们定义的方法是在Fragment中,fragment,fragment是context吗?当然不是,看看fragment class的定义


webp

image.png


fragment有生命周期,是视图的管理者,并不是context,所以你把方法定义在fragment中系统当然找不到。
那么view的context是谁呢?fragment的使用范围里,除了activity是Context外还有谁呢(滑稽)。



作者:雅卅夕
链接:https://www.jianshu.com/p/acd5caca0ad9


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消