实现目标: 1个Activity 其余都是Fragment
关于 返回键对Fragment返回栈和Activity任务栈的控制:
long preTime = 0; @Override public void onBackPressed() { if (fragmentManager.getBackStackEntryCount() == 0){ if (isTaskTop(MainActivity.class.getSimpleName())){ LogUtils.e(mContext,"位于栈顶"); if (System.currentTimeMillis() - preTime >2000){ preTime = System.currentTimeMillis(); Toast.makeText(mContext,"再点一次退出",Toast.LENGTH_SHORT).show(); }else { // System.exit(0); super.onBackPressed(); } }else { LogUtils.e(mContext,"没有位于栈顶"); super.onBackPressed(); } }else { LogUtils.e(mContext,"fragment出栈"); fragmentManager.popBackStack(); } }
解析:经过验证 Fragment的返回栈 和 Activity的任务栈 不能混为一谈 Activity任务栈中只有 Activity
/** * Return the number of entries currently in the back stack. */ public abstract int getBackStackEntryCount();
Fragment的返回栈中 进入总数 不等于0 时 Fragment 出回退栈
等于0时 操作 Activity 出栈