程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> fragment-activity 旋轉時 Fragment 重疊

fragment-activity 旋轉時 Fragment 重疊

編輯:編程綜合問答
activity 旋轉時 Fragment 重疊

我在程序中設置了一個 actionbar,在 actionbar 中有導航列表。我點擊列表連續打開2個fragment,並顯示在相同的activity中。

public void openFragment(AprilAppsFragment createdFragment){        
    if (createdFragment.getClass().isInstance(getDisplayedFragment()))
        return;

    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

    transaction.replace( R.id.main_fragment, createdFragment, "displayed fragment"); 
    transaction.addToBackStack(null);
    transaction.commit();  
}

我先打開 fragment A,然後打開 fragment B,再旋轉屏幕。Fragment A 被重新創建了導致程序崩潰。
如何避免重新創建fragment然後就不再顯示?

最佳回答:


你的問題是沒有為 fragments 保存狀態,因為你沒有添加android:configChanges="orientation|screenSize"
因為你沒有保存的狀態應用程序崩潰,第一個 fragment 又調用一次。所以要在 manifest 中添加:

<activity android:name=".yourActivity" android:configChanges="orientation|screenSize"

重寫 onSaveInstanceState 方法,保存 fragments的狀態。
在 onCreate 中添加:

if(savedInstanceState != null){
fragmentA = (FragmentA) fragmentManager.getFragment(savedInstanceState, stringValueA);
fragmentB = (FragmentB) fragmentManager.getFragment(savedInstanceState, stringValueB);
}

然後檢查 fragment 是否為空,然後創建它的實例,在 fragmentTransaction.relplace 中設置,或者在 openFragment 方法中設置。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved