2014-12-30 2 views
1

Здесь я написал простую деятельность и фрагмент. Я изменил ориентацию, и так как это изменение конфигурации вызов так называемый Activity.onCreate() снова, но почему Fragment.onCreateView() еще раз. Поскольку я не вызываю дочерний элемент дочернего элемента при вызове изменения конфигурации.Fragment.onCreateView вызвал изменение конфигурации?

Вот мой код:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home_container); 

     log("life_cycle_activity", "onCreate"); 

     if(savedInstanceState != null) { 

      log("life_cycle_activity", "ohh..configuration changed"); 
      return; 
     } else { 

      launchChildFragment(); 
     } 
    } 

Примечание: андроид: configChanges не работает на Настройки-> Экран-> FontStyle изменить

Любое предложение, как можно предотвратить Fragment вызов по изменению конфигурации.

ответ

1

Фрагменты воссоздаются, потому что параметр savedInstanceState содержит информацию о «предыдущих» фрагментах, присутствующих в Управлении. Проверьте реализацию для метода onRetainNonConfigurationInstance() (и его соответствующую логику в onCreate()) в FragmentActivity, и вы увидите, где эта информация хранится и перезагружается.

Что касается изменения конфигурации «размер шрифта», это не представляется возможным (или, по крайней мере, я не нашел способ) обрабатывать его с помощью android:configChanges. См. this question.

Как и в сторону, хотя:

Любое предложение, как можно предотвратить вызов для Fragment.onViewCreate на изменения конфигурации.

Зачем вам это нужно?

+0

Спасибо @Matiash за информацию. Я также нашел тот же анализ. С уважением Предотвращение Fragment.onViewCreate ... Я просто хотел избежать звонка на отдых ..Но теперь я довольно четко разбираюсь в процессе. – CoDe

1

Вы можете позвонить:

общественного недействительного setRetainInstance (булевы сохранить)

с истинным значением в вашем фрагменте OnCreate - это создаст так называемый сохранить фрагмент,

или предотвратить изменения конфигурации деятельности с использованием:

android: configИзменить s = "ориентация | клавиатура | клавиатураHidden | screenLayout | locale | fontScale | mnc | mcc»

в манифесте.

+0

Привет, Спасибо.Но все-таки метод фрагментации вызван .. и в отношении config para в явном. Я пытаюсь с помощью styleign-> display-> style style ..и ничего не нашел для него в configChange. Ваше мнение, пожалуйста. – CoDe

+0

@Shubh вы также можете проверить, не выполняется ли изменение конфигурации: isChangingConfigurations() - с api11, также смотрите в документах: http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean), в нем четко говорится: «Контролируйте, сохраняется ли экземпляр фрагмента в процессе повторного создания активности (например, из-за изменения конфигурации). ', также загляните в это подробное SO: http://stackoverflow.com/questions/11182180/understanding-fragments-setretaininstanceboolean – marcinj

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