Android 请使用以下代码行:- @Override public void onBackPressed() { if ( getSupportFragmentManager().getBackStackEntryCount() > 0){ fm.popBackStack(); }else { super.onBackPressed(); } }
要在Android 请使用以下代码行:- @Override public void onBackPressed() { if ( getSupportFragmentManager().getBackStackEntryCount() > 0){ fm.popBackStack(); }else { super.onBackPressed(); } },android,android-fragments,fragment,Android,Android Fragments,Fragment,要在片段中获得backStack功能,请在执行如下片段事务时使用.addToBackStack(null):- getSupportFragmentManager() .beginTransaction() .replace(R.id.YOUR_CONTAINER, YOUR_FRAGMENT,"TAG") .addToBackSt
片段
中获得backStack功能,请在执行如下片段事务时使用.addToBackStack(null)
:-
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.YOUR_CONTAINER, YOUR_FRAGMENT,"TAG")
.addToBackStack(null) /// IT IS NECESSARY TO GET THE BACK STACK PROPERTY IN YOUR FRAGMENT
.commitAllowingStateLoss();
@VassilisPallas先生的可能副本您能解释一下如何解决我的问题吗?您当前的实现中显示了什么?@amshear如果GetBackbackEntryCount()大于0,不适用于Loop可能重复@VassilisPallas先生的问题您能解释一下如何解决我的问题吗?您当前的实现中显示了什么?@amshear如果GetBackBackBacksetEntryCount()大于0,则不适用于Loop您的答案对我有效。唯一的问题是如果(应该添加)。。如果片段已经存在,则无需添加片段。。。如何处理..通过获取片段的标记..您可以重用堆栈中以前的片段。为此,您必须在添加或替换片段时传递“标记”。您的答案对我有用。唯一的问题是如果(应该添加)。。如果片段已经存在,则无需添加片段。。。如何处理..通过获取片段的标记..您可以重用堆栈中以前的片段。为此,您必须在添加或替换片段时传递“标记”。
private Stack<Fragment> stack = new Stack<Fragment>();
public void pushFragments(Fragment fragment, boolean shouldAnimate,
boolean shouldAdd) {
drawerClose = false;
if (shouldAdd)
stack.push(fragment);
this.changeFragment = fragment;
invalidateOptionsMenu();
changeFragment(fragment, shouldAnimate, false);
}
public void popFragments() {
/*
* Select the second last fragment in current tab's stack.. which will
* be shown after the fragment transaction given below
*/
Fragment fragment = stack.elementAt(stack.size() - 2);
// / pop current fragment from stack.. /
stack.pop();
/*
* We have the target fragment in hand.. Just show it.. Show a standard
* navigation animation
*/
this.changeFragment = fragment;
invalidateOptionsMenu();
changeFragment(fragment, false, true);
}
private void changeFragment(Fragment fragment, boolean shouldAnimate, boolean popAnimate) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
if (shouldAnimate)
ft.setCustomAnimations(R.anim.slide_in_right,
R.anim.slide_out_left);
if (popAnimate)
ft.setCustomAnimations(R.anim.slide_in_left,
R.anim.slide_out_right);
ft.replace(R.id.content_frame, fragment);
ft.commit();
}
//On BackPress just check this thing
private void backManage() {
if (stack.size() > 1) {
popFragments();
}
}
@Override
public void onBackPressed() {
if(check_if_backstack_is_null)
super.onBackPressed();
else
{
popupFromBackstack();
}
}
getFragmentManager().beginTransaction().replace(fragmentContainer.getID(), fragment)
.addToBackStack(null).commit();`
@Override
public void onBackPressed() {
if (fragment != null && fragment.getChildFragmentManager().getBackStackEntryCount() > 0){
fragment.getChildFragmentManager().popBackStack();
}else {
super.onBackPressed();
}
}
@Override
public void onBackPressed() {
if ( getSupportFragmentManager().getBackStackEntryCount() > 0){
fm.popBackStack();
}else {
super.onBackPressed();
}
}
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.YOUR_CONTAINER, YOUR_FRAGMENT,"TAG")
.addToBackStack(null) /// IT IS NECESSARY TO GET THE BACK STACK PROPERTY IN YOUR FRAGMENT
.commitAllowingStateLoss();