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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值