反射不太懂,大神帮帮忙

送你,小红花 2017-12-22 10:08:15
怎么通过反射拿到 AbsListView 类中的 RecycleBin 对象,然后同样再用反射去调用 clear 方法的例子
...全文
146 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingiis 2017-12-25
  • 打赏
  • 举报
回复
对 ,就是那样, 所有的反射都是建立在 先拿 class 名字,然后 invoke 调用就行了, 最关键你要有源码class字节码文件让你用。
文明游戏 2017-12-25
  • 打赏
  • 举报
回复
给你写了写大概就是这样子的:

private void ListViewClearRecycler(AbsListView listView) {
		try {
			Field field = AbsListView.class.getDeclaredField("mRecycler");
            field.setAccessible(true);    
			Object result = field.get(listView);
			Class<?>[] classes = AbsListView.class.getDeclaredClasses();
			for (Class<?> cls : classes) {
				if(cls.getSimpleName().equals("RecycleBin")) {
					Method clear = cls.getDeclaredMethod("clear");
					clear.setAccessible(true);
					clear.invoke(result);
					break;
				}
			}
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
关于反射这个东西其实还算简单,凡事多写写就好了,里面没几个方法的,多试试就可以了。
x80819091 2017-12-24
  • 打赏
  • 举报
回复
kotlin举例
class C {
    fun declaredFun() {}
}

fun classReferences(): String {
    val c = C()
    return c::class.declaredFunctions.first().name
}
//Activity onCreate方法里 reflection_text.text = classReferences()
今天刚写了一个反射的博客 http://blog.csdn.net/leonbec/article/details/78883276

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧