Ручка ориентацию с книжной на альбомную для checkbox

#android

#Android

Вопрос:

Я использую флажок в XML-макете .

 <CheckBox android:id="@ id/chkbox" 
android:checked="false" android:button="@drawable/ic_uncheck_img">
  

Этот флажок по умолчанию установлен в «false» и добавить изображение на кнопку Остановить.

 private CheckBox mCheck= null;

public void onCreate(Bundle savedInstanceState) {

mCheck= (CheckBox) findViewById(R.id.chkbox);
        mCheck.setChecked(false);
        mCheck.setButtonDrawable(R.drawable.ic_uncheck_img);


}

public void onClick(View view) {

            if (view.getId() == R.id.chkbox) {
                if (mCheck.isChecked())
                    mCheck.setButtonDrawable(R.drawable.ic_check_img);
                else
                    mCheck.setButtonDrawable(R.drawable.ic_uncheck_img);
}
  

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

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

Пожалуйста, предоставьте свои данные о том, как поддерживать состояние флажка, даже если ориентация изменится.

Ответ №1:

Это происходит потому, что по умолчанию изменение ориентации приводит к перезапуску действия (т.Е. ваш текущий экземпляр уничтожен, и новый экземпляр activity создается с помощью onCreate() ).

Я могу придумать пару способов выполнить то, что вам нужно.

1) Сохраните состояние флажка с помощью пакета onSaveInstanceState и восстановите его в вашем onCreate(). (Не забудьте обработать оба случая: пакет savedInstanceState не будет присутствовать при первом запуске activity).

сохранение состояния:

 @Override 
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putBoolean("CHECKBOX_STATE", mCheckbox.isChecked());
    super.onSaveInstanceState(savedInstanceState);
}
  

восстановление в onCreate:

 if(savedInstanceState != null) {
    mCheckBox.setChecked(savedInstanceState.getBoolean("CHECKBOX_STATE"));
}
  

2) В AndroidManifest установите атрибут «android: configChanges=»orientation»» в рассматриваемом действии. Это приведет к тому, что он не будет перезапускаться при изменении ориентации.

Ответ №2:

Запишите это в свой манифест file..in какое действие вы хотите это—

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

Определенно, это сработает..

Комментарии:

1. Это просто не позволяет Android воссоздать вашу активность при изменении ориентации. Но изменение ориентации — не единственный способ запустить полный перезапуск активности. Примечание из Android Docs : «Самостоятельная обработка изменения конфигурации может значительно затруднить использование альтернативных ресурсов, поскольку система автоматически не применяет их для вас. Этот метод следует рассматривать как последнее средство, когда вы должны избегать перезапусков из-за изменения конфигурации, и он не рекомендуется для большинства приложений «.