没有事件侦听器的XML onClick如何工作?

时间:2019-04-28 18:43:47

标签: android xml events onclick onclicklistener

Android中的事件需要一个侦听器和一个处理程序。这很明显,我们在Java类中看到在该侦听器中有一个Onclicklistener和Onclick方法。

但是,我对XML Onclick方法感到困惑,因为它没有Onclicklistener。他们总是必要的,还是在这种情况下隐藏了听众?

<Button
  android:Onclick="myMethod"
/>

public void myMethod(View view)
{
  //do magic here 
}

2 个答案:

答案 0 :(得分:1)

基本上,在创建attributes (like layout_width, onClick and so on)期间解析View时,如果已经在onClickListener中设置了此属性,则为此View创建一个XML 。 您可以在for example here上查找它,因为它是开源的。

请记住,由于Button扩展了TextViewTextView扩展了View,所以我一直在查看View类。

进一步说明:通过View创建XML时,将解析所有属性。然后是properties of the View are set according to those attributes。您也可以在定义custom View时自己做。

简单地回答您的问题:是的,在创建视图期间,会在XML后面“隐藏”创建一个onClickListener

答案 1 :(得分:0)

在Java代码或XML中设置OnClickListener之间没有区别。 如果要通过XML设置侦听器,则必须在Java代码中实现相应的方法。 通过XML设置侦听器时,然后在View构造函数中进行解析并自动为您设置侦听器:

case R.styleable.View_onClick:
        ...
    final String handlerName = a.getString(attr);
        if (handlerName != null) {
            setOnClickListener(new DeclaredOnClickListener(this, handlerName));
        }
    break;

它看起来像这样。 XML代码:

<Button android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Text"
    android:onClick="onClickFromXml" />

然后用Java代码:

public void onClickFromXml(View v) {
    // your click listener implementation
}