使用FLAG_ACTIVITY_REORDER_TO_FRONT时,overridePendingTransition不起作用

Dan*_*iel 26 flags android transition android-intent

我在堆栈中有两个活动,为了显示它们我使用FLAG_ACTIVITY_REORDER_TO_FRONT.到目前为止,当我想使用overridePendingTransition为动画带来动画时,问题就出现了.

Intent i = new Intent(ActivityA.this, ActivityB.class);
i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
ActivityA.this.startActivity(i);
overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left);
Run Code Online (Sandbox Code Playgroud)

但是,如果没有将标志添加到意图(删除第2行),则不会显示转换,则没有问题.

是否可以通过动画将活动带到前面?

非常感谢!

Dan*_*ato 38

实际上,使用REORDER_TO_FRONT时的正确解决方案是在要打开的活动的onNewIntent()方法中调用overridePendingTransition.

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
Run Code Online (Sandbox Code Playgroud)

替换你的过渡.

如果您需要有选择地替换转换,您可以在意图中添加额外的内容,并在onNewIntent()中进行检查以确定要执行的操作.

如果您不知道将要打开的转换(例如,如果您没有明确指定它),则这不适合,否则是正确的解决方案.

  • 唯一合适的解决方案.应该接受答案. (6认同)
  • 由于在创建活动时不会调用 `onNewIntent`,因此您还必须在启动活动的地方执行 `overridePendingTransition`。 (2认同)

bra*_*ey4 34

我遇到了同样的问题.诀窍是覆盖onResume()回调中的转换.

@Override
public void onResume() {
    super.onResume();
    overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left);
}
Run Code Online (Sandbox Code Playgroud)

  • 这个建议不正确.onResume在许多场合被调用,与正在使用的新意图无关.正确的解决方案是我指出的:在onNewIntent()方法中执行 (2认同)

小智 5

对我来说,解决方案是确保它在 UI 线程中运行

runOnUiThread(new Runnable() {
            public void run() {
                startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            }
        });

        finish();
Run Code Online (Sandbox Code Playgroud)


GSr*_*ree 0

在第二个 Activity 的 onCreate() 或 onStart() 中创建动画怎么样?