Изменение ориентации с помощью onClick android

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

if(!state){
    setRequestedOrientation(MainActivity.SCREEN_ORIENTATION_LANDSCAPE);
}
else {
    setRequestedOrientation(MainActivity.SCREEN_ORIENTATION_PORTRAIT);
}
state = !state;

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

Я также читал об использовании переключателя? Но я попытался реализовать это, но не очень хорошо, поэтому я попробовал этот метод.

Изменить

Я реализовал, используя вращение поверхности, и они могут подобрать вращение либо на 0, либо на 90.

if (orientation==Surface.ROTATION_0)
{
    Toast.makeText(getBaseContext(), "going to landscape", Toast.LENGTH_LONG).show();
    setRequestedOrientation(MainActivity.SCREEN_ORIENTATION_LANDSCAPE);
}
else if (orientation==Surface.ROTATION_90)
{
    Toast.makeText(getBaseContext(), "going to portrait", Toast.LENGTH_LONG).show();
    setRequestedOrientation(MainActivity.SCREEN_ORIENTATION_PORTRAIT);
}

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


person user2663646    schedule 15.08.2013    source источник
comment
Означает, что при нажатии кнопки вы хотите изменить ориентацию, но этого не произошло.   -  person Shani Goriwal    schedule 15.08.2013
comment
Когда ориентация изменяется, активность воссоздается. Итак, я думаю, после того, как вы измените ориентацию, значение state снова станет false. Проверь это.   -  person Sergey Zhabinskii    schedule 15.08.2013


Ответы (1)


Когда активность вращается, она уничтожается и создается заново. Когда это произойдет, вы потеряете значение «состояния». Это приведет к тому, что вы никогда не выберете другой вариант, поскольку он всегда возвращается к исходному варианту.

Посмотрите onSaveInstanceState() ЗДЕСЬ.

Затем вы можете получить доступ к пакету в методе onCreate(), чтобы получить значение.

person Scott Helme    schedule 15.08.2013
comment
Я просмотрел onSaveInstanceState(). Я не уверен на 100%, но я понял, что мне нужно использовать outStatu.putBoolean(state, state), а с onRestoreInstanceState это saveInstanceState.getBoolean(state); Это правильное направление? - person user2663646; 15.08.2013
comment
Это точно. Если вы не хотите реализовывать onRestoreInstanceState, вы можете проверить, является ли пакет saveInstanceState нулевым внутри onCreate(). Если пакет не нулевой, просто загрузите туда логическое значение. - person Scott Helme; 15.08.2013
comment
Проверьте параметры здесь: developer.android. ком/ссылка/андроид/приложение/ - person Scott Helme; 15.08.2013
comment
setRequestedOrientation(MainActivity.SCREEN_ORIENTATION_PORTRAIT); Это правильный код для изменения на портрет, не так ли? По какой-то причине он никогда не переходит в портретный режим. Я даже заставил ландшафтный режим попробовать этот код, но он не меняется. Очень странно. - person user2663646; 16.08.2013