Android重写onBackPressed()

问题描述 投票:49回答:8

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

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

EDITED

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

android android-intent event-handling override
8个回答
127
投票

是。只在那个Activity中覆盖它

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

不要把这个代码放在任何其他Activity


37
投票

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


4
投票

你可以只调用onBackPressed(),如果你想在后退按钮之后显示一些活动你提到了

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

这对我有用。


2
投票

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


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

0
投票

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

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


0
投票

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

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


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();
}
© www.soinside.com 2019 - 2024. All rights reserved.