【问题标题】:Button method seems to be overridden?按钮方法似乎被覆盖了?
【发布时间】:2013-12-06 16:30:17
【问题描述】:

我从活动 A 开始,其中包含两个按钮,分别将您带到活动 B 和 C。在活动 B 或 C 中,都有一个计时器:一旦计时器到期,您将被以下代码带回活动 A:

Intent intent = new Intent();
intent.setClass(B_or_C.this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);

然而,一旦我回到活动 A,就会发生一些奇怪的事情。点击 B 的按钮将我带到活动 C,反之亦然,尽管只是偶尔。有时点击按钮会让我进入正确的活动,有时却没有。我试过同时使用 onClickListeners 和 onClick(View view) 作为设置按下按钮时发生的事情的方法,但是在这两种情况下,运行上述代码后,点击按钮有可能将我带到错误的活动。

有没有办法明确设置点击按钮时会发生什么?

编辑:尝试将 final 修饰符添加到 onClick 方法中,即便如此,有时点击按钮 B 会让我进入活动 C。我不明白为什么会发生这种情况,按钮 B 的 onClick 方法只包含以下:

public final void onClickB(View view){
    Intent intent = new Intent(this, B.class);
    startActivity(intent);
}

为什么单击此按钮会将我带到 C.class,它确实如此?

【问题讨论】:

    标签: android button android-activity


    【解决方案1】:

    在第一种情况下,您为什么不以标准方式创建意图,而且,我认为您想使用 FLAG_ACTIVITY_CLEAR_TOP 而不是 FLAG_ACTIVITY_NEW_TASK:

    Intent intent = new Intent(B_or_C.this, A.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    getApplicationContext().startActivity(intent);
    
    //quit current activity
    finish();
    

    此外,在这两种情况下,在您开始意图完成当前活动后添加 finish(),例如:

    public final void onClickB(View view){
        Intent intent = new Intent(this, B.class);
        startActivity(intent);
    
        //add finish() to quit current activity
        finish();
    }
    

    另外,您可以考虑将按钮 B 或 C 的点击动作与 onBackPressed() 关联起来,这样您将依赖 Android 转到上一个活动。

    阅读有关任务和回栈的文档here

    【讨论】:

      【解决方案2】:

      在您的 ActivityB 或 C 中执行此操作,而不是重新启动 ActivityA

       Intent returnIntent = new Intent();
       returnIntent.putExtra("result",result);
       setResult(RESULT_OK,returnIntent);     
       finish();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多