Android覆盖onBackPressed()

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

在返回按钮上单击,我想在特定活动上调用一个对话框,但是在所有其他活动中,我希望它像以前一样工作(进入先前的活动)。

EDITED

谢谢大家的回答,我已经拥有了您告诉我的一切,但是我的问题是,当我在另一个活动上单击“后退”按钮时,我将转到上一个活动(我的“后退”按钮已覆盖) 以为它不起作用,我认为它在整个应用程序中都覆盖了onBackPressed(),现在我明白了。

8个解决方案
133 votes

是。 仅在具有Activity的那一个中覆盖它

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

请勿将此代码放在其他任何Activity

codeMagic answered 2019-11-08T07:40:25Z
41 votes

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

Erastus answered 2019-11-08T07:40:49Z
4 votes

您可以只调用onBackPressed(),如果要在“返回”按钮后显示一些活动,请提及

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

对我有用。

Sasanka Kudagoda answered 2019-11-08T07:41:20Z
2 votes

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

Pavlos answered 2019-11-08T07:41:46Z
2 votes

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

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(this, SecondActivity.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();
}
Jay Patel answered 2019-11-08T07:42:10Z
0 votes

最好和最通用的控制音乐的方法是创建一个母亲活动,在其中您要覆盖startActivity(Intent intent)-在其中放置shouldPlay=true,和onBackPressed()-在其中放入shouldPlay = trueonStop-在其中放置了一个条件媒体播放器。

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

dor00012 answered 2019-11-08T07:42:46Z
0 votes

首先,您必须考虑如果我称为A的活动扩展了另一个活动(B),并且在

它们要使用onbackpressed函数,那么B中的每个代码也都在A中运行。 因此,如果要分开这些,则应该分开。 这意味着A不应扩展B,那么您可以分别为它们分别进行onbackpressed。

Homa answered 2019-11-08T07:43:19Z
0 votes

试试这个工作

  @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();
}
Tabish khan answered 2019-11-08T07:43:46Z
translate from https://stackoverflow.com:/questions/18337536/android-overriding-onbackpressed