我有几十个按钮,每个按钮我想要为以下目的做
:Button abcdefg = (Button) this.findViewById(R.id.abcdefg);
abcdefg.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
audiotoplay = "abcdefg";
playAudio(audiotoplay);
}
});
在这种情况下,对于每个按钮,有比复制和粘贴每个按钮的代码块并用每个按钮ID替换abcdefg
更为简单的方法吗?
答案 0 :(得分:2)
在strings.xml中创建一个字符串数组,其中包含按钮ID的字符串,例如:
<string-array name="buttonids">
<item>abc</item>
<item>def</item>
<item>ghi</item>
</string-array>
,然后在您的活动中,获取此数组,并为每个字符串ID使用getIdentifier()
获取按钮的整数ID。
然后通过findViewById()
获得对每个按钮的引用并设置侦听器:
String[] buttonids = getResources().getStringArray(R.array.buttonids);
for (String buttonid : buttonids) {
final String name = buttonid;
int id = getResources().getIdentifier(name, "id", getPackageName());
Button button = findViewById(id);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
audiotoplay = name;
playAudio(audiotoplay);
}
});
}
我假设像您的示例代码一样,您将每个按钮的字符串ID分配给变量audiotoplay
。
如果您在应用中添加或删除按钮,则唯一要做的更改就是从strings.xml
的数组中添加或删除其字符串ID。
答案 1 :(得分:1)
您可以尝试黄油刀https://github.com/JakeWharton/butterknife
@OnClick(R.id.submit1)
@OnClick(R.id.submit2)
@OnClick(R.id.submit3)
@OnClick(R.id.submit4)
void submit() {
// Clicked ...
}
答案 2 :(得分:0)
您始终可以创建一个从Button扩展的类,并在那里定义该特定行为。之后,您需要更新布局.xml以使用新类,而不是默认类。
我不确定用例-但是如果您需要ID,可以将其另存为button标记,然后从 OnClick 进行访问。
例如:
public class YourButtonClass extends AppCompatButton {
....
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
audiotoplay = getTag();
playAudio(audiotoplay);
}
});
}
}
在您的活动/片段中:
findViewById<YourButtonClass>(R.id.btn_your_button).setTag("123")
并在您的布局上:
<this.is.your.package.name.YourButtonClass
android:id="@+id/btn_your_button"
...
/>
答案 3 :(得分:0)
最简单的方法是使用标签。布局xml中的每个按钮都应具有
android:onClick="buttonClick"
android:tag="abcd1234"
然后,您应该在活动
中具有一个功能public void buttonClick(View v) {
audiotoplay = v.getTag();
playAudio(audiotoplay);
}
您不必调用任何在xml中设置的setOnClickListener。只要确保buttonClick
方法在您的 Activity 类中,而不是 Fragment 类中即可。您可以将其命名为任意名称,我只是使用buttonClick与其他onClick区别开来。如果必须在Fragment中使用它,则可以使用相同的代码将一个onClickListener分配给一个变量(或让Fragment实现onClickListener),然后在所有按钮上调用setOnClickListener。