Во-первых, я бы сказал, что ваш слушатель onClick слишком сложен. Я бы реорганизовал его так, чтобы он выглядел так:
public void onClick(View v)
{
tvButtons.append(((Button)v).getText().toString());
}
Затем вы можете просто установить прослушиватель onclick каждой кнопки на класс, который реализует этот метод, без необходимости предоставлять объект кнопки.
Тогда я бы сделал то, что предложил Мика, и инкапсулировал повторяющуюся часть кода в методе. Кроме того, вы можете создать массив в 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());
}
}
Надеюсь, это поможет!