关闭按下的硬件按钮上的应用程序两次返回到之前的活动

时间:2014-01-16 10:49:41

标签: java android

在我的主要活动中,用户会收到通知,按下硬件返回按钮退出应用程序。除了用户死亡之外,这在大多数情况下都有效。当用户死亡时,它转到GameOverActivity。如果用户按下此活动中的后退按钮,然后继续按下主活动两次,则会重新打开游戏中的活动。这是代码,我已经在游戏中的后退按钮上声明了finish(),但它似乎没有帮助。

MainScreen返回退出方法:

@Override
    public void onBackPressed() {

        if (doubleBackToExitPressedOnce) {
            super.onBackPressed();
            return;
        }
        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this, "Press again to quit", Toast.LENGTH_SHORT).show();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                doubleBackToExitPressedOnce = false;
            }
        }, 2000);
    } 

GameOverActivity代码:

backButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Intent mainScreenActivityIntent = new Intent(GameOverActivity.this, MainScreenActivity.class);
                startActivity(mainScreenActivityIntent);
                finish();
            }

        });
    }

    @Override
    public void onBackPressed() {
        Intent mainScreenActivityIntent = new Intent(GameOverActivity.this, MainScreenActivity.class);
        mainScreenActivityIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(mainScreenActivityIntent);
        finish();
    }

以下是碰撞的逻辑,从而创建了GameOverActivity:

if (weight.getBounds().intersect(player.getBounds())) {
                player.setTouched(false);
                Intent gameOverIntent = new Intent(this.getContext(), GameOverActivity.class);
                this.getContext().startActivity(gameOverIntent);
                ((Activity) getContext()).finish();
            }

3 个答案:

答案 0 :(得分:0)

我认为你对Activity life cycle有些困惑。 按回GameOverActivity会实例化新的mainScreenActivity,这会产生问题。

并在你的GameOverActivity onbackpressed中调用super.onBackPressed

@Override
public void onBackPressed()
{
    super.onBackPressed();
    // and dont start a new activity as you are stacking MainActivity instances
    finish()
}

答案 1 :(得分:0)

您正在开始一项新活动,只是完成当前活动,添加必要的代码以完成从onBackPressed开始的活动。

答案 2 :(得分:0)

您应该在开始活动后finish()立即致电MainScreen GameOverActivity