Dziwne zachowanie nadmuchanych przycisków podczas zmiany koloru

Próbuję zaimplementować dynamiczną inflację przycisku dla mojej aplikacji na Androida, w oparciu o dane określone przez użytkownika w czasie rzeczywistym. Po kliknięciu przycisk zmienia kolor z niebieskiego na czerwony.

Kod odpowiedzialny za to wygląda następująco:

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();
}

Układ, do którego dołączam przyciski, jest prostyLinearLayout:

<LinearLayout
    android:id="@+id/layout_for_buttons"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
</LinearLayout>

Nadmuchanybutton_layout jestRelativeLayout składający się z aButton i aTextView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10sp" >

    <Button
        android:id="@+id/button_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/button_bg"
        android:gravity="left"
        android:paddingBottom="7dip"
        android:paddingLeft="50sp"
        android:paddingTop="7dip"
        android:textColor="#FFFFFF"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/label_view"
        android:layout_width="24dip"
        android:layout_height="24dip"
        android:layout_marginLeft="13dip"
        android:layout_marginTop="8dip"
        android:gravity="center"
        android:text="Hi"
        android:textColor="#FFFFFF"
        android:textSize="20sp"
        android:textStyle="bold" />

</RelativeLayout>

@drawable/button_bg jestshape w kolorze niebieskim:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:shape="rectangle" >
    <solid android:color="#0000ff" />
    <corners android:radius="10dp" />
</shape>

Teraz, kiedy uruchomię aplikację, wszystko wydaje się być w porządku. Po kliknięciu pierwszy przycisk nieoczekiwanie zmienia kolor na czerwony:

Po zamknięciu i ponownym uruchomieniu aplikacji każdy przycisk jest niebieski, a to zachowanie spełnia moje oczekiwania. Problem polega na tym, kiedy jauruchom ponownie aplikację po raz drugi, każdy przycisk zmienia kolor na czerwony (tak jakby został kliknięty):

Jak napisano w dokumentacji,inflate metoda powinnazawyżyć nową hierarchię widoków w oparciu o dany XML, więc co może być za to odpowiedzialne? Myślałem, że to samoGradientDrawable może być dzielony między każdym zawyżonym przyciskiem, ale debuger pokazuje, że każdy przycisk ma swój własnyGradientDrawable instancja.

questionAnswers(2)

yourAnswerToTheQuestion