2016-11-15 69 views
0

我有一個片段,其中有一個嵌套的片段,我以這種方式添加:嵌套的片段和回棧

  if (home == null) { 
       home = new MyFragment(); 
       FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
       transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
       transaction.addToBackStack(MyFragment.class.getName()); 
       transaction.add(R.id.child_fragment, home).commit(); 
      } 

當我進入另一個片段,並從上述回去孩子片段是不存在的。我檢查並且實例與null不同。

UPDATE:我更改了Ashwin S Ashok建議的代碼,但它仍然無法工作。使用這些方法

+0

嘗試使用添加不替換。 – zerocool

+0

假設上面的代碼位於父代片段中,如果將'getFragmentManager()'更改爲'getChildFragmentManager()',它會起作用嗎? – clownba0t

+0

添加/替換給出相同的結果 – charbinary

回答

0

嘗試:

//使用這個,如果你不想保留的片段。

protected void replaceFragmentStack(int container, Fragment fragment) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(container, fragment); 
    fragmentTransaction.commit(); 
} 

//如果你想在堆棧中添加片段,可以使用它。

protected void addFragmentStack(int container, Fragment fragment, String tag) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    fragmentTransaction.add(container, fragment, tag); 
    fragmentTransaction.addToBackStack(tag); 
    fragmentTransaction.commit(); 
} 
+0

我試着用你的建議,但它不再工作。我的其他片段正常工作,但不是嵌套片段。 – charbinary

0

我建議你到一個片段內進行的交易時使用getChildFragmentManager()。我猜它是一個錯誤。 您可以檢查出這個線程它會幫助你很多Android 4.2: back stack behaviour with nested fragments

你也需要經歷的好奇Techizen的blog

下面是同樣的機制

我希望這次的鏈接github上project樣本會幫助你。

+0

非常感謝您的信息。但是我真的很想在沒有支持庫的情況下做到這一點,因爲我應該對這些片段進行很多修改。 – charbinary