android之返回键与依次弹出返回栈

来源:互联网 发布:百度网盘会员充值淘宝 编辑:程序博客网 时间:2024/04/29 14:00

本文主要记录一些零碎的东西

在项目里经常需要重新返回键,最常见的就是下面的代码,实现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.FragmentManagerpublic 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也可以,个人感觉就可以完美(把返回栈里依次弹出后再退出应用)实现退出啦

0 0