30

私はアプリケーションをよりマテリアルにすることに取り組んでおり、いくつかの共有要素遷移を実装する方法に固執しています。バックスタックから削除するために、別の B を開始し、finish() を呼び出すアクティビティ A があります。私の場合、2 つのアクティビティ間で共有したい要素がありますが、A から B に渡されると、A は重要ではなくなります。startActivity(ctx,intent, bundle) の後に finish() を呼び出さないと、終了/開始アニメーションは完全に機能します。ただし、finish を呼び出すと、アニメーションが開始する前に非常に醜いちらつきが発生します。

私が見落としているものはありますか、それとも私がやろうとしていることを実行できないだけですか?

4

6 に答える 6

31

A から B に移行するときにのみこれを実行したい場合は、onStop 関数でアクティビティを終了できます。フラグを作成し、startActivity(ctx,intent, bundle) を呼び出した後に設定します。

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}

アクティビティ A はもう存在しないため、アクティビティ B が終了したら、finishAfterTranstion() ではなく、finish() を呼び出すようにしてください。

アクティビティ A を終了した後、戻るボタンを押すと、B の共有要素が画面にハングアップすることがあります。ActivityB.onEnterAnimationCompleteこれを回避するには、transitionName を null に設定します。

于 2015-04-16T00:07:23.313 に答える
7

これはおそらく遅いですが、同じ問題がありました。私のために働いたのは:

supportFinishAfterTransition();

これはサポート ライブラリに含まれており、魅力的に機能します。

finish()PS: に電話するときは電話する必要はありませんsupportFinishAfterTransition()

于 2017-07-11T07:53:09.173 に答える
2

5.0 以降でfinishAfterTransition()メソッドを試してみると、終了遷移が発生した後にアクティビティを終了できます。

于 2016-05-05T12:13:24.387 に答える