我需要在将Fragment
添加到后台堆栈之前显示2个片段。但是addToBackStack
方法属于FragmentTransaction
,因此我无法在单FragmentTransaction
中添加所有这三个方法,因为所有三个方法都会被后退按钮点击删除。但是如果我使用三个不同的FragmentTransation
,那么在第三个片段变得可见之前,用户也可以看到前两个片段。
有没有办法可以在后台堆栈中添加三个Fragment
,而不会在交易过程中将前两个run
显示出来?
答案 0 :(得分:0)
我不确定您是否可以使用本机API执行此操作。尽管如此,您可以使用Queue Interface
实现自己的堆栈答案 1 :(得分:0)
将一个OnBackStackChangedListener添加到fragmentmanager,然后当最后一个backstack条目是片段2 popBackStack时,这样两次:
0 FragmentHome ( back_stack_name : "fragment_home" )
1 Fragment1( back_stack_name : "fragment_1" )
2 Fragment2 ( back_stack_name : "fragment_2" )
3 Fragment3 ( back_stack_name : "fragment_3" )
请注意,您应该在fragment3中添加OnBackStackChangedListener,然后在弹出backstack后从fragmentmanager中删除它
// add in fragment3
final FragmentManager fragment_manager = getActivity().getSupportFragmentManager();
fragment_manager
.addOnBackStackChangedListener(new OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if (fragment_manager.getBackStackEntryCount() > 0) {
String last_fragment_name = getLastBackStackFragmentName(fragment_manager);
if (last_fragment_name.equals("fragment_2")) {
fragment_manager.removeOnBackStackChangedListener(this);
fragment_manager.popBackStack();
fragment_manager.popBackStack();
}
}
}
});
private String getLastBackStackFragmentName(FragmentManager fragment_manager ) {
int back_stack_count =fragment_manager.getBackStackEntryCount();
String last_fragment_name = "";
if (back_stack_count>0) {
last_fragment_name = fragment_manager.getBackStackEntryAt(
back_stack_count).getName();
}
return last_fragment_name;
}