android: configChanges = “ориентация” не работает с fragmentами

Я просто пытаюсь адаптировать некоторые из моих приложений для HoneyComb.

Проблема, с которой я сталкиваюсь, – это разрушение моей деятельности по изменению ориентации (пейзаж / портрет)

Когда я использовал classическую деятельность, я написал в манифесте:

Но теперь все эти строки больше не работают!

Есть ли обходной путь для этого?

Мой код:

  

Основываясь на моем опыте с Honeycomb 3.0 и библиотекой совместимости (r1).

configChange="orientation" работает с fragmentами в отношении предотвращения активности (к которой она применяется) воссоздается при изменении ориентации. Если вы хотите, чтобы fragment не был воссоздан при повторном создании активности, вызовите setRetainInstance в onCreate .

Если я не AppListFragment что-то, я не совсем получаю вашу вторую запись манифеста, это не AppListFragment Fragment ? Если да, то почему он указан как запись в вашем манифесте?

См. SO-ответ для новых квалификаторов, которые, вероятно, будут причиной этого, если вы нацеливаете sdk 13, предложите попробовать android:configChanges="orientation|screenSize"

У меня была очень похожая проблема, но мне пришлось сделать несколько дополнений, чтобы заставить ее работать с различными версиями (включая ICS).

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

  Размер  

У меня это работало на pre-Honeycomb с:

   

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

Я также изменил способ сохранения и перезагрузки:

  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Set up webview object View v = inflater.inflate(R.layout.webview_layout, container, false); webview = (WebView)v.findViewById(R.id.webview_fragment); webview.getSettings().setJavaScriptEnabled(true); // Check to see if it has been saved and restore it if true if(savedInstanceState != null) { if (savedInstanceState.isEmpty()) Log.i(tag, "Can't restore state because bundle is empty."); else { if (webview.restoreState(savedInstanceState) == null) Log.i(tag, "Restoring state FAILED!"); else Log.i(tag, "Restoring state succeeded."); } } else { // Load web page webview.setWebViewClient(new MyWebViewClient()); webview.getSettings().setPluginsEnabled(true); webview.getSettings().setBuiltInZoomControls(false); webview.getSettings().setSupportZoom(false); webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webview.getSettings().setAllowFileAccess(true); webview.getSettings().setDomStorageEnabled(true); webview.loadUrl(mTabURL); } return v; } 

Код для состояния состояния экземпляра save:

  @Override public void onSaveInstanceState(Bundle outState) { if(webview.saveState(outState) == null) Log.i(tag,"Saving state FAILED!"); else Log.i(tag, "Saving state succeeded."); } 

Надеюсь это поможет.

До API 13 появилось новое значение для атрибута screenSize , screenSize

Поэтому, если вы используете большие экраны, обязательно добавьте screenSize в свой атрибут configChanges:

  android:configChanges="orientation|keyboardHidden|screenSize" 

Начиная с Android 3.2 (уровень API 13), размер экрана также изменяется, когда устройство переключается между портретной и альбомной ориентацией. Таким образом, если вы хотите предотвратить перезапуск во время изменения ориентации при разработке для уровня API 13 или выше (как объявлено атрибутами minSdkVersion и targetSdkVersion), вы должны включить значение «screenSize» в дополнение к значению «ориентация». То есть, вы должны декалировать android: configChanges = “orientation | screenSize”. Однако, если ваше приложение нацелено на уровень API 12 или ниже, ваша деятельность всегда обрабатывает это изменение самой конфигурации (это изменение конфигурации не перезапускает вашу активность даже при работе на устройстве Android 3.2 или выше).

У меня была такая же проблема (например, перезапуск активности) даже без fragmentов.

Я изменился:

 android:configChanges="orientation|keyboardHidden" 

чтобы:

 android:configChanges="orientation|keyboardHidden|screenSize" 

Это предотвратит перезапуск активности.

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

1) В манифесте,

  android:configChanges="orientation|keyboardHidden|screenSize" 

2) В файле classа переопределите onSaveInstanceState (Bundle outState). Это оно! Наслаждаться 🙂

В файле манифеста внутри операции добавьте эту строку
android: configChanges = “keyboard | keyboardHidden | orientation | screenSize”.

Добавьте это в Manifeast.Xml

  

Его работа для вас.

Interesting Posts

Swift 3 сохранение и извлечение пользовательского объекта из userDefaults

Bluetooth гарнитуры и появляется в звуковых устройствах, но отображается как отключено?

Как получить список коллекции значений из app.config в WPF?

Что такое хороший микрофон и общая настройка для семейного видеочата через Skype?

В чем разница между Convert.ToInt32 и (int)?

Как остановить отображение сообщений INFO на искровой консоли?

Как изменить заголовок и значок панели задач Android

Написание и чтение (fwrite – fread) структуры с указателями

Поиск общего диапазона IP-адресов моей сети

Как установить Laravel 4 в подпапку веб-хостинга без публичной публикации / приложения / папки?

Как заставить stream Java ждать выхода другого streamа?

Использование INDIRECT и AND / IF для условного форматирования

Загрузка из Интернета прямо на Google

Почему рекомендуется ограничивать использование пользовательских действий в настройках WiX / MSI?

Как удалить строку из GridView?

Давайте будем гением компьютера.