Я пытаюсь изменить ориентацию экрана для своего приложения для Android, но безуспешно. Вот мой манифест:
<activity
android:name="fr.ups.l3info.l3info_catchgameactivity.CatchGameActivity"
android:label="@string/app_name"
android:screenOrientation="user"
android:configChanges="orientation|keyboardHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
И я добавляю эту функцию в свой класс активности:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
Но когда я меняю ориентацию экрана, приложение создается заново, и эта функция никогда не выполняется. Что я сделал не так? Спасибо за вашу помощь.
3 ответа
Используйте это в своем манифесте android:configChanges="keyboardHidden|orientation|screenSize|layoutDirection"
Возможно, вы захотите узнать больше о жизненном цикле активности. Дополнительную информацию можно найти здесь (http://developer.android.com/ обучение / основы / жизненный цикл-активности / index.html)
Но более важно ознакомиться со своим состоянием активности .
Вам нужен не onConfigurationChanged(Configuration newConfig)
, а onSaveInstanceState(Bundle savedInstanceState)
метод.
Теперь в вашем методе OnCreate()
вам нужно будет проверить, есть ли уже сохраненное состояние, а затем воссоздать эту ситуацию.
По этой ссылке есть очень хорошее объяснение: Сохранение состояния активности Android с помощью сохранения состояния экземпляра
Но в основном вам нужно сделать следующее:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
А затем с учетом этого:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call the superclass first
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
} else {
// Probably initialize members with default values for a new instance
}
...
}
STATE_SCORE
и STATE_LEVEL
- некоторые значения public static final String
, которые используются для того, чтобы каким-то образом пометить ваш материал, который вы хотите сохранить.
Например, если у вас есть представление EditText, и вы вводите что-то, а затем вращаете экран, это значение будет потеряно. Но в вашем методе onSaveInstanceState()
вы должны использовать этот параметр Bundle
и поместить значение вашего представления EditText как String.
Сохранив это, теперь вы можете получить это значение в своем методе onCreate()
и установить для него значение вашего представления EditText.
Надеюсь это поможет :)
Serializable
, и все его поля также должны реализовать Serializable
. Если в вашем контроллере или любом другом классе, который вы пытаетесь сохранить, есть представление, это невозможно, но также неправильно иметь представление внутри контроллера. Дайте мне знать, если вам нужна помощь в этом. Еще немного вашего кода очень поможет.
Если вы пытаетесь определить «другой макет» для своего приложения при изменении ориентации, просто определите новый макет, дайте ему то же имя , что и другой макет, и поместите его в раздел res/layout-land
.
Таким образом, когда ваше приложение воссоздает себя и вызывает setContentView(layout_name)
в функции onCreate
, оно вызывает подчиненный res/layout-land
, а не тот, который находится в res/layout
.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.