поведение радиогруппы при смене ориентации

Я надеюсь, что кто-то поможет мне понять, что происходит с радиогруппой Android и обратными вызовами onCheckedChanged при изменении ориентации.

У меня есть радиогруппа с тремя переключателями. Вторая кнопка определяется как кнопка по умолчанию, устанавливая для атрибута checked значение true. Мой xml для радиогруппы выглядит следующим образом:

    <RadioGroup
        android:id="@+id/rgReportRange"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/One" />

        <RadioButton
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="@string/Two" />

        <RadioButton
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/Three" />
    </RadioGroup>

RadioGroup имеет onCheckedChangedListener. Когда ориентация изменяется, onCheckedChangedListener вызывается по-разному в зависимости от того, какая кнопка была выбрана до изменения ориентации.

Если выбран button1, я вижу один обратный вызов метода onCheckedChanged с checkedID, равным button1.

Если выбран button2, я не вижу обратного вызова для метода onCheckedChanged.

Если выбран button3, я вижу два обратных вызова для метода onCheckedChanged. Первый обратный вызов имеет checkID, равный button2. Второй обратный вызов имеет checkID, равный button3.

Я не понимаю разницы в поведении между первым и третьим случаями. В обоих есть переключатель, отличный от выбранного по умолчанию.


person Dan U.    schedule 18.05.2012    source источник
comment
Эта проблема также вызывала у меня проблемы. Я нашел решение своей конкретной ситуации и разместил ответ здесь stackoverflow.com/questions/22438780/   -  person Chris    schedule 19.03.2014


Ответы (2)


Внесите изменения в XML-файл, например:

         <activity android:name=".YourActivityName"
        android:configChanges="orientation|screenSize" />
person Rishav Sharma    schedule 06.10.2018
comment
Добро пожаловать в Stack Overflow. Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, улучшает его долгосрочное значение. Как ответить - person Elletlar; 06.10.2018

откройте файл manifest.xml и измените его в теге Activity ‹>:

<activity
            android:configChanges="keyboardHidden|orientation"></activity>

после этого проверьте свой результат: :)

person Dhruvil Patel    schedule 18.05.2012
comment
Спасибо за предложение. Это позволяет избежать проблемы. Но мне все еще любопытно, почему он так себя вёл. - person Dan U.; 19.05.2012