0

我有三個fragmentsDrawerLayolut改變方向改變我的片段DrawerLayout

  • 片段A

  • 片段B

  • C片段

    默認情況下(在init的應用程序)我加載FragmentA:如果我去,例如,FragmentB很好。

問題:當我在FragmentB旋轉我的屏幕,我回來了FragmentA

我不知道如何避免這種情況。我試圖在AppCompatActivityonCreate下一個代碼:

Fragment mFragment = null; 

if(getSupportFragmentManager().findFragmentById(R.id.myframe) == null) { 

    mFragment = new CalendarioFragment(); 
    getSupportFragmentManager().beginTransaction().add(R.id.myframe, mFragment).commit(); 

} else { 

    if(mFragment instanceof FragmentA){ 
     mFragment = (FragmentA) getSupportFragmentManager().findFragmentById(R.id.myframe); 

    }else if(mFragment instanceof FragmentB){ 
     mFragment = (FragmentB) getSupportFragmentManager().findFragmentById(R.id.myframe); 

    }else if(mFragment instanceof FragmentC){ 
     mFragment = (FragmentC) getSupportFragmentManager().findFragmentById(R.id.myframe); 

    } 
} 

但如我所料...可能,請,有人幫助我與我的問題不工作?請,任何幫助是值得歡迎

我讀到這個其他的解決方案:

<activity android:name="CalActivity" android:configChanges="orientation|keyboardHidden"/> 

但我認爲這是不RECOMENDABLE ...(對我不起作用)隨着

+0

請任何幫助是值得歡迎 – MartaGom

回答

1

<activity android:name="CalActivity" android:configChanges="orientation|keyboardHidden"/>您需要在您的Activity中撥打。它應該是這個樣子:

@Override 
public void onConfigurationChanged(Configuration config) { 
    super.onConfigurationChanged(config); 
    // Your code here to replace fragments correctly 
} 

這是關於這個主題的Android的API指南:Handling Runtime Changes

不過,如你所說,這是不推薦的,更好的解決方案將使用onSavedInstanceStateonRestoreInstanceState,像所以:

​​

更多的看到這個問題:Saving Activity State on Android

+0

我不明白「你的代碼在這裏替換碎片」爲什麼我需要替換我的碎片? +1 :) – MartaGom

+0

@MartaGom因爲碎片應該重置爲原始狀態。你將需要使用你的代碼來記住哪個片段當前處於活動狀態,並在'onConfigurationChanged()'或'onRestoreInstanceState()'中切換回它。 – Bryan

+0

現在我不能測試你的答案。我明天嘗試,如果它有效,我會將它標記爲正確答案:)不要擔心 – MartaGom