2015-03-10 5 views
0

У меня есть активность с инициализациями с множественными значениями (фрагменты, sharedpreferences, services, ui components (панель поиска, кнопки и т. Д.) ...), и я не хочу перезапускать активность, когда ориентация экрана изменитьизменить ориентацию ориентации экрана android

Я нашел простой (и рабочий раствор) с помощью android:configChanges="keyboardHidden|orientation|screenSize", но мой технический менеджер запретил мне этот путь, потому что, по его мнению, это плохая практика

Каковы другие способы для того, чтобы правильно отрегулировать ориентацию экрана изменения?

Большого спасибо

Моей основная деятельность

@AfterViews 
    public void afterViews() { 
     putSharedPrefs(); 
     initializeFragments(); 
     initializeComponents(); 
     initializeSynchronizeDialog(); 
     initDownloadDialog(); 
    } 
+0

Вы можете перейти к манифесту вашего проекта и настроить изменения своей деятельности там, добавив свойства «android: screenOrientation». –

ответ

5

Вы можете просто добавить макет для ландшафтного режима.
Вам просто нужно добавить папку layout-land в свой каталог «res» и определить, как выглядит ваша деятельность, если она находится в ландшафтном режиме.
ПРИМЕЧАНИЕ -Вставьте имя файла xml так же, как имя, которое находится в папке простого макета и которое вы используете в своей деятельности. Он автоматически определит ориентацию экрана и соответственно применит макет.
EDIT1
Теперь, чтобы сохранить текст из текстового вида =) Предположим, что ваше текстовое изображение называется MyTextView в вашем XML-файле макета. Для вашей деятельности потребуется следующее: private TextView mTextView; private static final String KEY_TEXT_VALUE = "textValue";

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
mTextView = (TextView) findViewById(R.id.main); 
if (savedInstanceState != null) { 
    String savedText = savedInstanceState.getString(KEY_TEXT_VALUE); 
    mTextView.setText(savedText); 
} 

@Override 
protected void onSaveInstanceState (Bundle outState) { 
super.onSaveInstanceState(outState); 
outState.putString(KEY_TEXT_VALUE, mTextView.getText()); 
} 

В принципе, когда Android разрушает и восстанавливает вашу активность для изменения ориентации, он вызывает onSaveInstanceState() перед уничтожением и вызывает OnCreate() после воссоздания. Независимо от того, что вы сохраняете в комплекте в onSaveInstanceState, вы можете вернуться из параметра onCreate().

Итак, вы хотите сохранить значение текстового вида в onSaveInstanceState() и прочитать его и заполнить свое текстовое представление в onCreate(). Если действие создается в первый раз (не из-за изменения вращения), saveInstanceState будет иметь значение null в onCreate(). Вам также, вероятно, не нужен андроид: freezesText = "true"

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

+0

Вам также необходимо сохранить свое состояние (если оно есть). Переопределить 'protected void onSaveInstanceState (Bundle outState)' и в вашем 'protected void onCreate (Bundle savedInstanceState)' восстановить ваше состояние (ваши переменные), если входящий пакет содержит какие-либо. Обратите внимание, что такие компоненты, как «EditText» и друзья, сохраняют свое собственное состояние. –

+0

@ Kunal. Большое спасибо . У меня уже есть макет и связанный макет. Проблема в том, что при изменении ориентации экрана все действия перезапускаются, поэтому я теряю жизненный цикл моих компонентов/данных. Есть ли способ предотвратить это, кроме параметра configChanges – ulquiorra

+0

@ P-a Bäckström. Спасибо, поэтому SaveInstanceState позволяет мне сохранить жизненный цикл деятельности, не перезагружая его? – ulquiorra

Смежные вопросы