Android重写onBackPressed()

时间:2013-08-20 14:23:46

标签: android android-intent event-handling override

是否可以仅为一项活动覆盖onBackPressed()

在后退按钮上单击我想调用特定活动的对话框,但在所有其他活动中,我希望它能够像以前一样工作(转到上一个活动)。

EDITED

谢谢大家的答案,我已经拥有了你告诉我的所有内容,但我的问题是,当我点击另一个活动的后退按钮时,我会去我之前的活动(那里我有后退按钮Overridden )我认为它不起作用,我认为它在整个应用程序中覆盖onBackPressed(),现在我得到了它。

8 个答案:

答案 0 :(得分:126)

是。只能在Activity中使用

覆盖它
@Override
public void onBackPressed()
{
     // code here to show dialog
     super.onBackPressed();  // optional depending on your needs
}

不要将此代码放在任何其他Activity

答案 1 :(得分:36)

按照codeMagic的示例覆盖onBackPressed()方法,如果不希望执行默认操作(完成当前活动),则删除对super.onBackPressed();的调用。

答案 2 :(得分:4)

您可以调用onBackPressed(),如果您想在后退按钮后显示某些活动,则提及

Intent intent = new Intent(ResetPinActivity.this, MenuActivity.class);
    startActivity(intent);
    finish();

对我有用。

答案 3 :(得分:2)

只需在要显示对话框的活动中调用onBackPressed()方法,然后在其中显示对话框。

答案 4 :(得分:1)

只需使用以下代码初始化字段

即可
private int count = 0;
    @Override
public void onBackPressed() {
    count++;
    if (count >=1) {
        /* If count is greater than 1 ,you can either move to the next 
        activity or just quit. */
        Intent intent = new Intent(ResetActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
        overridePendingTransition
        (R.anim.push_left_in, R.anim.push_left_out);
        /* Quitting */
        finishAffinity();
    } else {
        Toast.makeText(this, "Press back again to Leave!", Toast.LENGTH_SHORT).show();

        // resetting the counter in 2s
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                count = 0;
            }
        }, 2000);
    }
    super.onBackPressed();
}

答案 5 :(得分:0)

控制音乐的最佳和最通用的方法是创建一个母亲活动,在其中覆盖startActivity(Intent intent) - 在其中放置shouldPlay=true, 和onBackPressed() - 在其中放置了shouldPlay = trueonStop - 在其中放置条件mediaPlayer.stop,其中shouldPlay为条件

然后,只需将母活动扩展到所有其他活动,不需要重复代码。

答案 6 :(得分:0)

首先,你必须考虑如果我所谓的A活动扩展了另一项活动(B),并且两者都在

他们想要使用onbackpressed函数,那么B中的每个代码也会在A中运行。因此,如果你想分开这些,你应该将它们分开。这意味着A不应该扩展B,那么你可以为每个人单独进行反向压缩。

答案 7 :(得分:0)

尝试此工作

  @Override
public void onBackPressed(){
        super.onBackPressed();
         Intent i=new Intent(Intent.ACTION_MAIN);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        finish();
}