Intereting Posts

Android: configChanges = "ориентация" не работает с фрагментами

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

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

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

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

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

Мой код:

<activity android:name=".TwitterActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation" /> <activity android:name=".TwitterActivity$AppListFragment" android:configChanges="keyboardHidden|orientation" /> 

Solutions Collecting From Web of "Android: configChanges = "ориентация" не работает с фрагментами"

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

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

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

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

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

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

 <activity android:name=".MyMainActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" > Размер <activity android:name=".MyMainActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" > 

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

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

Я должен был сделать первый пример, чтобы запустить его на всех версиях. В настоящее время я использую фрагменты и 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 или выше).

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

Я изменился:

 android:configChanges="orientation|keyboardHidden" 

чтобы:

 android:configChanges="orientation|keyboardHidden|screenSize" 

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

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

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

  android:configChanges="orientation|keyboardHidden|screenSize" 

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

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