我知道以前也有人问过类似的问题,但这次是不同的。我是一个开发安卓应用的新手,关于android:onclick=""
XML属性和setOnClickListener
方法之间的区别,我有三个问题。
发布于 2014-01-24 15:12:49
OnClickListener与OnClick之间的差异:
function binding in XML Layout是onClick和它将调用的函数之间的绑定。该函数必须有一个参数(视图),onClick才能运行。
两者的功能相同,只是一个是通过java代码设置的,另一个是通过xml代码设置的。
setOnClickListener代码实现:
Button btn = (Button) findViewById(R.id.mybutton);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myFancyMethod(v);
}
});
// some more code
public void myFancyMethod(View v) {
// does something very interesting
}
XML实现:
<?xml version="1.0" encoding="utf-8"?>
<!-- layout elements -->
<Button android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:onClick="myFancyMethod" />
<!-- even more layout elements -->
Performance:
两者在性能上是相同的。Xml在编译时被预解析成二进制代码。所以在Xml中没有额外开销。
限制:
android:onClick是针对API level 4以上的,所以如果你的目标是小于1.6,那么你就不能使用它。
发布于 2017-05-25 23:21:13
我很惊讶没有人谈论这一点,但是要小心,尽管android:onClick
XML似乎是处理单击的一种方便方法,但setOnClickListener
实现除了添加onClickListener
之外,还做了一些其他的事情。实际上,它将视图属性clickable
设置为true。
虽然这在大多数Android实现上可能不是问题,但根据phone构造函数,button总是默认为clickable = true,但在某些phone模型上的其他构造函数在非Button视图上可能有默认的clickable = false。
因此,设置XML是不够的,您必须一直考虑在非按钮上添加clickable,如果您的设备的默认值为android:clickable="true"
= true,并且您甚至一次都忘记了放置此XML属性,那么您将不会在运行时注意到问题,但当它到达客户手中时,您将获得市场上的反馈!
此外,我们永远不能确定proguard将如何混淆和重命名XML属性和类方法,因此不是100%安全,所以它们总有一天不会有bug。
因此,如果您不想遇到麻烦,也不想去考虑它,最好将setOnClickListener
或像ButterKnife这样的库与批注@OnClick(R.id.button)
一起使用
发布于 2014-01-24 15:19:52
简单地说:
如果在xml中有android:onClick = "someMethod"
,它将在您的Activity类中查找public void someMethod
。OnClickListener
在您的Activity中称为right ,它链接到某个特定的View
。例如,在下面的代码中,someButton.setOnClickListener
说明了当按下someButton
时必须执行的操作。
希望它能有所帮助:)
https://stackoverflow.com/questions/21319996
复制相似问题