Как установить параметры макета кнопки в цикле? - PullRequest
0 голосов
/ 04 апреля 2011

У меня 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.
}

, чтобы уменьшить дублирование в коде?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2011

Во-первых, я бы сказал, что ваш слушатель 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());
    }
}

Надеюсь, это поможет!

0 голосов
/ 04 апреля 2011

Просто создайте метод createButton (int textResourceId), который выполняет всю работу, и сделайте девять обращений к нему со своими текстовыми идентификаторами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...