android BaseActivity$1.onClick 匿名内部类 this.getClass()问题
来源:互联网 发布:天津平面设计美工招聘 编辑:程序博客网 时间:2024/06/02 04:16
我想写一个组件,可以利用注解的方式,自动找到这个View,并且可以找到点击事件的方法,像这样(注解类就不贴出来了):
@ViewClick(viewId=R.id.clickBtn, clickMethod="btnClickMethod")
private Button btnClick;
但是中间遇到了一些问题,log如下所示:
12-27 19:04:51.090: W/System.err(14345): java.lang.IllegalArgumentException: expected receiver of type com.mobile.component.setting.SysSettingActivity, but got java.lang.Class<com.mobile.component.setting.SysSettingActivity>
12-27 19:04:51.100: W/System.err(14345): at java.lang.reflect.Method.invokeNative(Native Method)
12-27 19:04:51.100: W/System.err(14345): at java.lang.reflect.Method.invoke(Method.java:511)
12-27 19:04:51.100: W/System.err(14345): at com.mobile.component.base.BaseActivity$1.onClick(BaseActivity.java:80)
12-27 19:04:51.100: W/System.err(14345): at android.view.View.performClick(View.java:3538)
12-27 19:04:51.100: W/System.err(14345): at android.view.View$PerformClick.run(View.java:14319)
12-27 19:04:51.100: W/System.err(14345): at android.os.Handler.handleCallback(Handler.java:608)
12-27 19:04:51.100: W/System.err(14345): at android.os.Handler.dispatchMessage(Handler.java:92)
12-27 19:04:51.100: W/System.err(14345): at android.os.Looper.loop(Looper.java:156)
12-27 19:04:51.100: W/System.err(14345): at android.app.ActivityThread.main(ActivityThread.java:5045)
12-27 19:04:51.100: W/System.err(14345): at java.lang.reflect.Method.invokeNative(Native Method)
12-27 19:04:51.100: W/System.err(14345): at java.lang.reflect.Method.invoke(Method.java:511)
12-27 19:04:51.100: W/System.err(14345): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-27 19:04:51.100: W/System.err(14345): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-27 19:04:51.100: W/System.err(14345): at dalvik.system.NativeStart.main(Native Method)
分析:我在一个类的一个方法里面设置了点击事件,view.setOnClickListener(),所以com.mobile.component.base.BaseActivity$1.onClick(BaseActivity.java:80)这行log, BaseActivity$1.onClick这个就代表是匿名内部类,比如onclick就会这样显示;
在onClick方法中调用this.getClass()获得的就不是当前的这个类了,而是匿名内部类,类似:BaseActivity$1.onClick,所以总是提示我找不到我类的方法,所以我就这样:BaseActivity.this.getClass(),这样改造之后,获得的就是当前类了。
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Method method;
Log.i("tag", "BaseActivity.this = " + BaseActivity.this + "\n " + "BaseActivity.this.getClass() = " + BaseActivity.this.getClass());
method = BaseActivity.this.getClass().getDeclaredMethod(clickMethod, View.class);
if(method != null){
method.invoke(BaseActivity.this, v);
}else{
throw new IllegalAccessException("no such method");
}
}
}
- android BaseActivity$1.onClick 匿名内部类 this.getClass()问题
- 匿名内部类 this.val$的问题
- 匿名内部类 this.val$的问题
- 匿名内部类中this的使用问题
- android学习:匿名内部类
- android 构造匿名内部类
- JAVA之旅(九)——Object类,equals,toString,getClass,内部类访问规则,静态内部类,内部类原则,匿名内部类
- 黑马程序员--匿名内部类问题
- java中匿名内部类的问题
- 关于匿名内部类的问题
- 关于匿名内部类的问题详解
- 内部类、匿名内部类
- 内部类、匿名内部类
- 内部类,匿名内部类
- 内部类(匿名内部类)
- 内部类 ---匿名内部类
- 内部类,匿名内部类
- Android中随处可见的匿名内部类
- Cannot recover key
- 2012 年度最受欢迎的中国开源软件评选结果
- perl学习网址
- ListView使用SimpleAdapter加载非drawable资源图片
- Three20研究院之完全自定义TabBar(八)
- android BaseActivity$1.onClick 匿名内部类 this.getClass()问题
- MySQL 常用指令
- Balsamiq Mockups简单介绍(UI草图绘制工具)
- 安装mysql 5.5 之后启动 mysql 5.5 command line client时 窗口一闪而过 怎么解决
- (转)在Servlet(或者Filter,或者Listener)中使用spring的IOC容器
- Mega Man‘s Missions UVA11795
- js跳转页面方法
- Flynn分类法
- js 实现map