我们在 Android 中有为按钮设置 OnClickListener 的方法 (button.setOnClickListener(....),但没有 .getOnClickListener。
我需要将监听器分配给一个按钮并将其保存在变量中。
OnClickListener是Button类的保护域,继承自TextView,继承自View类。字段名称“mOnClickListener”。我什至通过反射(reflection)都无法得到它:
...
Button button1 = (Button) findViewById(R.id.button1);
OnClickListener listener = getListener(button1);
...
public OnClickListener getListener(Button b) {
java.lang.reflect.Field field = b.getClass().getSuperclass().getSuperclass().getDeclaredField("mOnClickListener");
...
}
获取“noSuchFieldException”。有什么想法可以实现吗?
PS 我知道其他方法可以让我的应用在没有反射的情况下工作,只是想知道为什么它不起作用。
最佳答案
您正在调用类中的方法 getClass
。相反,您应该在 Button
类的对象上调用 getClass
,或者使用类字段:
Button.class.getSuperClass().getSuperClass().getDeclaredField("mOnClickListener"):
另一种方法:
Button.class.getField("mOnClickListener");
getField 方法包括从父类(super class)继承的字段。
关于java - 如何访问按钮的 protected 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14605136/