2014-12-30 74 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改變

任何建議如何防止更改配置片段通話。

回答

1

片段正在被重新創建,因爲savedInstanceState參數包含活動中「先前」片段的信息。在FragmentActivity中檢查onRetainNonConfigurationInstance()方法(及其在onCreate()中的相應邏輯)的實現,您將看到這些信息存儲和重新加載的位置。

至於「字體大小」配置更改,似乎不可能(或至少我沒找到辦法)來處理它與android:configChanges。請參閱this question

順便說一句,雖然:

任何建議如何防止呼籲Fragment.onViewCreate上 配置更改。

爲什麼你需要這樣做?

+0

感謝@Matiash的信息。我也發現了同樣的分析。問候Fragment.onViewCreate預防......我只是想避免娛樂電話..但現在我對流程非常清楚。 – CoDe

1

您可以撥打:

公共無效setRetainInstance(布爾保留)

在你的片段的onCreate真正價值 - 這將創造所謂的保留片段,

或預防活動配置更改使用:

android:configChange s =「orientation | keyboard | keyboardHidden | screenLayout | locale | fontScale | mnc | mcc」

in manifest。

+0

嗨,謝謝。但仍然Fragment方法被調用..關於配置段在reflectiest ..我嘗試settign-> display->字體樣式..我找不到它在configChange中處理。你的意見。 – CoDe

+0

@Shubh你也可以檢查configchange是否正在進行:isChangingConfigurations() - 自api11以外,還可以查看docs:http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean),它明確指出:'控制是否在重新創建活動時(例如從配置更改)保留片段實例。 ',也看看這個詳細的SO:http://stackoverflow.com/questions/11182180/understanding-fragments-setretaininstanceboolean – marcinj