问题描述
|
我的活动(字母)上有26个按钮。对于所有这些人,我都希望拥有相同的onclick-listener。是否有另一种方法可以为所有按钮设置“ default-onlick-listener \”,而无需通过
button.setonClickListener(...)
进行设置?
会很好。
谢谢
解决方法
在布局中,您可以为每个按钮指定ѭ1。另外,由于这只是另一个属性,因此您还可以使用样式或主题指定此属性,从而一次有效地设置所有这些属性。
以此为主题的缺点是onClick将应用于所有视图。可能不是您想要的。因此,我建议仅在每个按钮上指定
android:onClick
。
另一种方法是创建一个自Button扩展的自定义视图,并在其中提供常用的onClick功能。
这是使用“ 1”方法的示例。在布局中,定义按钮并提供onClick值:
<Button
android:id=\"@+id/button1\"
android:tag=\"a\"
android:onClick=\"doSomething\"
... />
<Button
android:id=\"@+id/button2\"
android:tag=\"a\"
android:onClick=\"doSomething\"
... />
<Button
android:id=\"@+id/button3\"
android:tag=\"b\"
android:onClick=\"doSomething\"
... />
您的活动将采用doSomething
方法:
public void doSomething(View v) {
// in here,we can branch off based on the ID or the tag.
switch (v.getId()) {
case R.id.button1:
// something
break;
case R.id.button2:
// something
break;
case R.id.button3:
// something
break;
}
if (v.getTag() != null && v.getTag().equals(\"a\")) {
// do something for the button\'s tagged with \'a\'
}
}
, 尝试在布局xml中取消android:onClick = \“ myOnClickListener \”属性的显示。
例:
<Button
android:text=\"A\"
android:id=\"@+id/ButtonA\"
android:layout_width=\"fill_parent\"
android:layout_height=\"wrap_content\"
android:onClick=\"MyOnClickListener\">
</Button>