Android 活动在按下后退按钮两次之前关闭

Android 活动在按下后退按钮两次之前关闭,android,android-fragments,Android,Android Fragments,我想在按下后退按钮两次后关闭应用程序。我要在活动中加载不同的片段。我只想在主(主)片段上关闭应用程序,用户按下后退按钮两次。但它不能正常工作。以下是我关闭活动的代码:- @Override public void onBackPressed() { if (getFragmentManager().getBackStackEntryCount() == 0) { //super.onBackPressed(); if (doubleBackToExit

我想在按下后退按钮两次后关闭应用程序。我要在活动中加载不同的片段。我只想在主(主)片段上关闭应用程序,用户按下后退按钮两次。但它不能正常工作。以下是我关闭活动的代码:-

@Override
public void onBackPressed() {

    if (getFragmentManager().getBackStackEntryCount() == 0) {
        //super.onBackPressed();

        if (doubleBackToExitPressedOnce) {
            super.onBackPressed();
            return;
        }

        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                doubleBackToExitPressedOnce=false;
            }
        }, 2000);

    } else {
        backFlag = 1;
        getFragmentManager().popBackStack();
    }
它给我的信息是“按下后退按钮两次”,但片段并没有传输到主片段。请帮我解决这个问题

编辑问题


您可以通过保持两秒钟的间隔再次按下此按钮来尝试此替代方法来实现此目的:

private static final int TIME_INTERVAL = 2000; // # milliseconds, desired time passed between two back presses.
private long mBackPressed;

@Override
public void onBackPressed()
{
    if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis()) 
    { 
        super.onBackPressed(); 
        return;
    }
    else { Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show(); }

    mBackPressed = System.currentTimeMillis();
}

请检查是否已在后堆栈中添加了事务(如果您在其他片段上,则GetBackbackEntryCount()的调试值大于0),该值不大于0表示您未在后堆栈中添加片段事务。所以,如果你是在一个片段上,而不是在家里,那么反按应用程序将直接退出,但我认为你希望先在家里,然后为应用程序退出显示吐司,我需要这样做,但没有成功,所以你有问题。getSupportFragmentManager().beginTransaction().add(detailFragment,“detail”)//将此事务添加到后堆栈中。addToBackStack().commit();请阅读此内容以将片段事务添加到后堆栈
private static final int TIME_INTERVAL = 2000; // # milliseconds, desired time passed between two back presses.
private long mBackPressed;

@Override
public void onBackPressed()
{
    if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis()) 
    { 
        super.onBackPressed(); 
        return;
    }
    else { Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show(); }

    mBackPressed = System.currentTimeMillis();
}