我有9个(以编程方式生成)按钮。我这样做是为了所有人:
Button btnButton1 = new Button(this);
btnButton1.setText(getText(R.string.button_1));
btnButton1.setTextSize(BUTTON_TEXT_SIZE);
btnButton1.setHeight(BUTTON_HEIGHT);
btnButton1.setWidth(BUTTON_WIDTH);
btnButton1.setOnClickListener(buttonClicked(btnButton1));
(其中buttonClicked是这样的:
private final View.OnClickListener buttonClicked(final Button button)
{
return new View.OnClickListener()
{
public void onClick(View v)
{
tvButtons.append(button.getText().toString());
}
};
};
和tvButtons是一个TextView。 )
有没有办法可以做类似的事情:
for (button : buttons)
{
button.setText &c. &c.
}
减少代码中的重复?
答案 0 :(得分:3)
首先,我要说你的onClick监听器过于复杂。我重构它看起来像这样:
public void onClick(View v)
{
tvButtons.append(((Button)v).getText().toString());
}
然后,您只需将每个按钮的onclick侦听器设置为实现该方法的类,而无需提供按钮对象。
然后我会按照Micah的建议做,并在方法中封装重复的代码部分。此外,您可以在strings.xml中创建一个数组,如下所示:
<string-array name="buttonStrings">
<item>String1</item>
<item>String2</item>
<item>String3</item>
</string-array>
然后您可以使用
检索该数组getResources().getStringArray(R.array.buttonStrings);
并循环遍历,在每个元素上调用createButton方法。整件事应该是这样的:
public class MyActivity extends Activity implements OnClickListener {
public onCreate() {
String[] strings = getResources().getStringArray(R.array.buttonStrings);
for(int i=0;i<strings.length;++i) {
createButton(strings[i]);
}
}
private Button createButton(String s) {
Button b = new Button(this);
b.setText(s);
b.setTextSize(BUTTON_TEXT_SIZE);
b.setHeight(BUTTON_HEIGHT);
b.setWidth(BUTTON_WIDTH);
b.setOnClickListener(this);
return b;
}
@Override
public onClickListener(View v) {
tvButtons.append(((Button)v).getText().toString());
}
}
希望有所帮助!
答案 1 :(得分:0)
只需创建一个完成所有工作的createButton(int textResourceId)方法,并使用文本ID对其进行九次调用。