Android中的事件需要一个侦听器和一个处理程序。这很明显,我们在Java类中看到在该侦听器中有一个Onclicklistener和Onclick方法。
但是,我对XML Onclick方法感到困惑,因为它没有Onclicklistener。他们总是必要的,还是在这种情况下隐藏了听众?
<Button
android:Onclick="myMethod"
/>
public void myMethod(View view)
{
//do magic here
}
答案 0 :(得分:1)
基本上,在创建attributes (like layout_width, onClick and so on)
期间解析View
时,如果已经在onClickListener
中设置了此属性,则为此View
创建一个XML
。
您可以在for example here上查找它,因为它是开源的。
请记住,由于Button
扩展了TextView
和TextView
扩展了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
}