2016-11-15 103 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