怎么通过反射拿到 AbsListView 类中的 RecycleBin 对象,然后同样再用反射去调用 clear 方法的例子

解决方案 »

  1.   

    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
      

  2.   

    给你写了写大概就是这样子的: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();
    }
    }
    关于反射这个东西其实还算简单,凡事多写写就好了,里面没几个方法的,多试试就可以了。
      

  3.   

    对 ,就是那样, 所有的反射都是建立在 先拿 class 名字,然后 invoke 调用就行了, 最关键你要有源码class字节码文件让你用。