Странное поведение раздутых кнопок при смене цвета

Я пытаюсь реализовать динамическую инфляцию кнопок для моего приложения 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 пример.

Ответы на вопрос(2)

Ваш ответ на вопрос