2014-06-17 42 views
1

我的主要活動的佈局文件包含一個我正在使用NavigationDrawer Dinamically加載 碎片。 爲了實現這一目標我使用FragmentPagerAdapter:如何在android中保存/恢復嵌套片段?

@Override 
public Fragment getItem(int index) { 

    switch (index) { 
    case 0: 
     return new FragmentA(); 
    case 1: 
     return new FragmentB(); 
    case 2: 
     return new FragmentC(); 
    } 

    return null; 
} 

在FragmentA有一個ViewPager +另一FragmentPagerAdapter,這樣你就可以刷卡 三者之間的其它片段。 (Frament1,Fragment2,Fragment3)。 它的工作原理是這樣的:

(我不能插入圖片由於缺乏信譽的...)

http://62.165.232.86:1991/images/fragments.png 

當我Frament1,Fragment2和Fragment3之間的交換,它工作正常。 (我設置ViewPager的offScreenPageLimit不夠高。)

,當我瀏覽到FragmentB或FragmentC然後FragmentA被摧毀,我不知道如何保存它的實例,並恢復它,becaues我沒有 參考問題occures片段1。

EDIT 1: 我FragmentA和FragmentB之間交換這樣的:

FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); 
    tx.replace(R.id.main, mAdapter.getItem(0)); 
    tx.commit(); 

林有點混亂。我應該保存Fragment1,2,3和片段A的實例, ,並在我導航回片段A時將其全部恢復,但我不知道如何,因爲我沒有引用子片段。

你能幫我嗎?

謝謝您的回答, Daneel Olivaw

+0

你A和B之間切換如何'FragmentTransaction.replace()'? – zella

+0

是的,我就這樣開關。 (我也編輯了這個問題。) – DaneelOlivaw

+0

嘗試使用'FragmentTransaction.add()'而不是 – zella

回答

0

想法(我不是100%肯定):

Fragment fragment = getFragmentManager().findFragmentByTag("yourtag"); 
if (fragment==null) { 
    fragment = mAdapter.getItem(0) 
} 
FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); 
tx.add(R.id.main, fragment, "yourtag"); 
tx.commit(); 
+0

它不起作用。當我使用tx.add時,新的片段放置在alrady存在的片段的頂部,並且可以看到兩個片段。另一個問題是當我回到FragmentA時,由於片段已經添加,發生異常。 – DaneelOlivaw

+0

如果我使用tx.replace而不是tx.add,那麼在新添加之前刪除前一個片段,但在這種情況下,刪除的片段會被破壞,而findFragmentByTag稍後將不會找到它。 – DaneelOlivaw