按两次返回按钮之前活动已关闭

3

当我按两次返回按钮后,我希望关闭应用程序。在活动中,我有不同的片段要加载。仅当我在主(Home)片段上并且用户按了两次返回按钮时才希望关闭应用程序。但它不能正常工作。这是我关闭活动的代码:

@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();
    }

它给我显示“按两次后退按钮”的消息,但碎片没有转移到主碎片。请帮我解决这个问题。

已编辑的问题

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

    } else {
        getFragmentManager().popBackStack();
    }

请检查您是否已将事务添加到后退栈中(如果您在其他片段上,则getBackStackEntryCount()的调试值大于0) - Ramit
它不大于0。 - Mahesh
所以你遇到了问题。请阅读以下内容,将片段事务添加到后退堆栈中:getSupportFragmentManager().beginTransaction() .add(detailFragment, "detail") // 将此事务添加到后退堆栈 .addToBackStack() .commit(); https://developer.android.com/training/implementing-navigation/temporal.html - Ramit
@ramit 我能够返回到主页片段,但是之后无法显示有关返回按钮按下的提示。我已经编辑了问题。 - Mahesh
让我们在聊天中继续这个讨论 - Ramit
显示剩余3条评论
1个回答

0

您可以通过尝试这种替代方法来实现,即在按返回键之后保持两秒的间隔再次按下:

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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接