【问题标题】:Android Overriding onBackPressed()Android 覆盖 onBackPressed()
【发布时间】:2013-08-20 14:23:45
【问题描述】:

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

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

已编辑

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

【问题讨论】:

标签: android android-intent event-handling overriding


【解决方案1】:

是的。仅在Activity 中使用

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

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

【讨论】:

  • 以上代码如何在片段中工作?这是任何解决方案
  • 你好,我有同样的问题,我的活动 2 正在进行活动 1,但如果我点击活动 2,我不想去活动 1,我的应用程序应该退出。我该怎么做?
  • @Tabishkhan 在启动活动 2 的意图后,只需在活动 1 上调用 finish()。然后,活动 2 将是堆栈中唯一的一个
  • @codeMagic 我们如何减少这种方法的重复?意味着当他们点击返回时,我希望 5 个活动具有相同的功能。那么如何在所有活动中使用相同的功能呢?
  • @UnKnown 创建一个活动以扩展您的其他活动并将代码放入该超级活动中
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你可以只调用 onBackPressed() 并且如果你想在返回按钮之后显示一些活动,你已经提到了

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

    这对我有用。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          控制音乐的最佳和最通用的方法是创建一个母 Activity,在其中覆盖 startActivity(Intent intent) - 在其中放置 shouldPlay=true, 和onBackPressed() - 你在里面放shouldPlay = trueonStop - 在其中放置一个条件 mediaPlayer.stop 并以 shouldPlay 作为条件

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

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              【解决方案8】:

              试试这个它的工作原理

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-09-06
                • 2020-12-04
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多