本文主要记录一些零碎的东西
在项目里经常需要重新返回键,最常见的就是下面的代码,实现2s内连续按返回键退出应用,但是我使用的是fragment,切换时添加到了返回栈里,返回时我想达到把返回栈里一次弹出来,在退出应用。我这里(extends FragmentActivity)直接贴出我的最终代码。
private boolean isExit = false;
//返回按钮
// @Override
public void onBackPressed() {
// super.onBackPressed();
// 判断返回栈是否为空
//解决fragment在返回栈里但是不返回问题,感觉有些问题
if (!getSupportFragmentManager().popBackStackImmediate()) {
if(!isExit) {
isExit = true;
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
isExit = false;
}
}, 2000);
} else {
finish();
}
}
}
其实不难发现,按正常思路直接重新返回键的方法,不会弹出返回栈的内容,而是执行我们的2s退出程序,发现直接使用android自带的方法,可以弹出返回栈的内容,但是退出应用时没有我们想要的效果。于是想着两个结合起来,开始查看源码
FragmentActivity 里返回键执行的方法
public void onBackPressed() {
if (!mFragments.getSupportFragmentManager().popBackStackImmediate()) {
supportFinishAfterTransition();
}
}
supportFinishAfterTransition()这个是应用的退出方法,不是这里本人关心的地点,只要是上面的判断条件。
看看官方的解释
android.support.v4.app.FragmentManager
public abstract boolean popBackStackImmediate()
Like popBackStack(), but performs the operation immediately inside of the call. This is like calling executePendingTransactions() afterwards.
Returns:
Returns true if there was something popped, else false.
哈哈,Returns true if there was something popped, else false. 也就是说只要我返回栈里有something,就返回true,于是就有了上面的代码,再结合
上一篇 android之fragment活动栈单例,不止是fragment,正常的activity也可以,个人感觉就可以完美(把返回栈里依次弹出后再退出应用)实现退出啦