2013-07-19 54 views
1

当将点击btn当我按下btn2将显示碎片1,我相信碎片1将被放置在后台堆栈中。第二次,当我点击btn时,我想显示其以前的状态。我将包含使我非常困惑的代码,但我不知道如何去做。Android - 如何显示Backstack碎片

btn.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
String str = "frag1"; 
Fragment videoFragment = new VideoPlayerFragment(); 
FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
transaction.replace(R.id.child_fragment, videoFragment, str); 
transaction.addToBackStack(null); 
transaction.commit(); 
} 
}); 

btn2.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
String str2 ="frag1"; 
String str3 ="frag2"; 
//FragmentManager.BackStackEntry backEntry= 
//getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager(). 
//getBackStackEntryCount()-1); 
//String str3 = backEntry.getName(); 
//Fragment fragment= getFragmentManager().findFragmentByTag(str3); 

Fragment videoFragment = new CopyOfVideoPlayerFragment(); 
FragmentTransaction transaction2 = getFragmentManager().beginTransaction(); 
transaction2.addToBackStack(str2); 
transaction2.replace(R.id.child_fragment, videoFragment, str3); 
transaction2.commit(); 
} 
}); 

代码的混乱及不工作:

FragmentManager.BackStackEntry backEntry=getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager().getBackStackEntryCount()-1); 
String str3 = backEntry.getName(); 
Fragment fragment= getFragmentManager().findFragmentByTag(str3); 
+0

所以你BTN点击第二次,你要显示片段1再次右边的代码? – hardartcore

+0

是的,所以我想检查一下,如果这是第二次点击btn,如果是,那么获取它的保存状态并再次显示它,将片段2放入后台。但是,我也不知道如何让prev陷入困境。与我的backEntry有错误。 – rahstame

+0

如果你想将'Fragment2'放在backstack中,你必须再次添加'Fragment1',这样'Fragment2'可以被添加到backstack中。 – hardartcore

回答

0

对于显示先前fragtment(一个在堆栈中),使用此代码:

getSupportFragmentManager().executePendingTransaction(); 
+0

感谢您的回复。您是否可以引导我或提供其他代码来检查是否存在片段1的状态,如果需要显示反向加载。我不知道如何使用上面的代码先生的代码。 – rahstame

+0

您可以控制片段的onSaveBundleInstances(Bundle inBundle),并且您将在同一片段的onCreate(Bundle outBundle)中获得相同的包。 –

0

我认为有以下方法可以完成你的要求,

1.c reate一个片段管理器来保存这个片段的引用。

2.每次单击按钮时,删除旧的,添加新的。

 FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.remove(fragment1); 
    ft.add(fragment2);