2016-06-20 61 views
0

我正在使用onConfigurationChanged函數檢查方向更改在Android 4.0.3上顯示我的項目上的兩個不同的片段,但是當應用程序運行在第一個位置(橫向或縱向)相關片段不顯示時,我更改方向相關片段顯示但當我再次改變它的應用程序崩潰。 這裏是我的代碼:爲什麼當使用onConfigurationChanged函數時應用程序崩潰?

FragmentManager  fragmentmanager  = getFragmentManager(); 
FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction(); 


@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Fragment1 fragment1 = new Fragment1(); 
     fragmentTransaction.replace(android.R.id.content, fragment1); 

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Fragment2 fragment2 = new Fragment2(); 
     fragmentTransaction.replace(android.R.id.content, fragment2); 
    } 
    fragmentTransaction.commit(); 
} 

我該如何解決它?

+0

你得到了什麼類型的異常? –

+0

把異常的日誌 – Amir

+0

而我認爲你不要去掉前一個片段,這是個例外。 – Amir

回答

0

首先確保您在清單中的活動中聲明瞭android:configChanges屬性。

當運行時發生配置更改時,活動將被關閉並默認重新啓動,但使用此屬性聲明配置將會阻止活動重新啓動。相反,該活動仍在運行,並調用onConfigurationChanged()方法。

因此,你需要申報清單屬性,讓您的活動知道,你要自己處理配置的變化:

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

在第二,你需要onConfigurationChanged,因爲它之前申請交易不會在啓動時調用 - 這是您在應用程序啓動時什麼也看不到的原因。

最後,把線FragmentManager fragmentmanager = getFragmentManager(); FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction();

OnConfigurationChange()內,避免垃圾收集後空指針異常。

+0

謝謝我的錯誤是使用FragmentManager fragmentmanager = getFragmentManager(); FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction();出於功能的考慮,但仍然存在一個問題,即在運行應用程序的第一個應用程序中,沒有顯示任何碎片。 :( – zahraMHD

+0

第一次啓動時請檢查您是縱向還是橫向,然後申請交易 –

相關問題