Странное поведение раздутых кнопок при смене цвета
Я пытаюсь реализовать динамическую инфляцию кнопок для моего приложения Android, основываясь на вводе, указанном пользователем в режиме реального времени. При нажатии кнопка меняет свой цвет с синего на красный.
Ответственный за это код выглядит следующим образом:
LayoutInflater layoutsInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.layout_for_buttons);
// Let's say that now we need only 3 buttons:
for (int i = 0; i < 3; i++) {
RelativeLayout buttonLayout = (RelativeLayout) layoutsInflater
.inflate(R.layout.button_layout, linearLayout, false);
Button button = (Button) buttonLayout.getChildAt(0);
button.setText("Button " + i);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View buttonView) {
Button button = (Button) buttonView;
GradientDrawable gradientDrawable = (GradientDrawable) button
.getBackground();
gradientDrawable.setColor(Color.RED);
gradientDrawable.invalidateSelf();
}
});
linearLayout.addView(buttonLayout);
linearLayout.invalidate();
}
Макет, к которому я добавляю кнопки, прост:LinearLayout
раздутыйbutton_layout
этоRelativeLayout
состоящий изButton
и:TextView
@drawable/button_bg
этоshape
в синий цвет:
Теперь, когда я запускаю приложение, кажется, все в порядке. После нажатия первая кнопка не удивительно становится красной:
Когда я закрываю и перезапускаю приложение, каждая кнопка синего цвета, и это поведение соответствует моим ожиданиям. Проблема в том, когда яперезапустить приложение во второй разкаждая кнопка становится красной (как если бы она была нажата):
Как написано в документации,inflate
метод долженраздувать новую иерархию представлений на основе данного XML, так что может быть за это ответственным? Я думал, что то же самоеGradientDrawable
может быть общим для каждой раздутой кнопки, но отладчик показывает, что каждая кнопка имеет своюGradientDrawable
пример.