有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java确认仅在Mainacity中按back关闭应用程序?

我希望用户确认关闭我的应用程序。我在主要活动中使用以下代码:

@Override
public void onBackPressed() {
    if (this.lastBackPressTime < System.currentTimeMillis() - 4000) {
        toast = Toast.makeText(this, "Press back again to close this app", Toast.LENGTH_LONG);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
        this.lastBackPressTime = System.currentTimeMillis();
    } else {
        if (toast != null) {
            toast.cancel();
        }
        super.onBackPressed();
    }
}

在其他课程中,我使用以下方法:

@Override public void onBackPressed() {
    if (!mWebView.onBackPressed()) { return; }
    // ...
    super.onBackPressed(); }

现在我在每节课上都会得到确认事件,但我只想在我的主要活动中得到它。我该怎么做

注:我必须在其他课程中扩展我的主要活动。这应该是要解决的主要问题,但我仍然不知道具体如何解决


共 (4) 个答案

  1. # 1 楼答案

    @Vala,如果您将片段添加到Activty,那么您可以使用FragmentManagerBackSackEntryCount,如下所示

      int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
                    if (backStackCount == 1) {
                        Toast.makeText(this, "Press back again to close this app", Toast.LENGTH_LONG).show();
                    }
    

    如果backstackcount为1,则意味着再次按下后退按钮时,剩余的frgament将从后堆栈中弹出,并且应用程序将退出

  2. # 2 楼答案

    试试这个 在您的主要活动中

     private boolean exit = false;
    @Override
    public void onBackPressed()
    {
        if (exit) {
            finish(); // finish activity
        } else {
            Toast.makeText(this, "Press Back again to Exit.",
                           Toast.LENGTH_SHORT).show();
            exit = true;
            new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        exit = false;
                    }
                }, 3 * 1000);
    
        }
    }
    
  3. # 3 楼答案

    像这样试试

        Activity activity = this;
        if (activity instanceof MainActivity) {
            if (this.lastBackPressTime < System.currentTimeMillis() - 4000) {
                Toast toast = Toast.makeText(this, "Press back again to close this app", Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
                this.lastBackPressTime = System.currentTimeMillis();
            } else {
                if (toast != null) {
                    toast.cancel();
                }
                super.onBackPressed();
            }
        } else {
            super.onBackPressed();
        }
    
  4. # 4 楼答案

    将其他类更改为

    @Override 
    public void onBackPressed() {
       if (mWebView.canGoBack()) { return; }
                // ...
       super.onBackPressed(); 
    }