Java android Xml属性android:onClick=";是如何定义的&引用;幕后工作?

Java android Xml属性android:onClick=";是如何定义的&引用;幕后工作?,java,android,xml,Java,Android,Xml,我问这一点是因为我感兴趣,主要是因为我害怕使用我不理解的属性\代码。据我所知,java中的所有事件都是通过实现一个适合该事件的侦听器接口来工作的。如果我在活动中为2个按钮实现onClick,为第三个按钮定义一个带有android:onClick=“…”属性的方法,会发生什么?我发现了这一点,所以在阅读之后我了解到它可能是通过一个匿名类实现的,该类实现了OnClickListener, 但是我想知道更多关于它的信息,以及我可能以什么方式打破某些东西,利用这些知识来提升我的能力?android不清楚

我问这一点是因为我感兴趣,主要是因为我害怕使用我不理解的属性\代码。据我所知,java中的所有事件都是通过实现一个适合该事件的侦听器接口来工作的。如果我在活动中为2个按钮实现onClick,为第三个按钮定义一个带有android:onClick=“…”属性的方法,会发生什么?我发现了这一点,所以在阅读之后我了解到它可能是通过一个匿名类实现的,该类实现了OnClickListener,
但是我想知道更多关于它的信息,以及我可能以什么方式打破某些东西,利用这些知识来提升我的能力?android不清楚它是如何工作的,,,,

它使用反射来确定在运行时调用的方法。它是一个视图的属性,因此该视图具有相关代码,用于查看是否设置了该属性,然后找出活动的方法名称并触发它

视图总是绑定到特定活动的上下文,因此,可以通过反射调用此公共方法

您可以在这里看到view类的源代码。您可以看到第2003行,这里正在处理这种情况


为了更简单地回答您的问题,您在此处指定的名称是加载该布局的活动中的公共方法。该方法必须采用View类型的单个参数

例如:

android:onClick="myMethod"


public void myMethod(View view) {
}

为什么不呢?我看不出它有什么坏处。反射很慢,不允许编译时检查。你在这里做的事情不多。它发生在运行时。它不会让你的应用程序慢到你应该担心的程度。这里所做的事情的数量是无关紧要的。这比创建自己的单击处理程序要慢,而且同样没有编译时检查。自定义名称空间如何与视图反射一起工作?因为名称空间变量不能存在于视图类中?(除非扩展了?)