web-dev-qa-db-ja.com

アクティビティ間の移行が終了したときに通知を受け取る方法は?

タイトル通り...

アクティビティ間のトランジションを使用していますが、トランジションが終了したときと開始する直前の両方のアクティビティに、ある種のリスナー(またはイベント)が必要です。

トランジションを作成するサンプルコードは次のとおりです。

    final Intent intent = new Intent(activity, TargetActivity.class);
    if (initialQuery != null)
        intent.putExtra(EXTRA_INITIAL_QUERY, initialQuery);
    final String transitionName = activity.getString(R.string.transition_name);
    ViewCompat.setTransitionName(viewToTransitionFromAndTo, transitionName);
    final ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
            viewToTransitionFromAndTo, transitionName);
    ActivityCompat.startActivityForResult(activity, intent, requestCode, options.toBundle());
13

使用する任意のトランジションにリスナーを追加できます。例えば:

_getWindow().getSharedElementTransition().addListener(listener);
_

これは、遷移自体が開始および終了するときにリッスンします。ただし、アクティビティの移行情報全体が提供されるわけではありません。たとえば、呼び出し元のアクティビティは、呼び出されたアクティビティがいつ遷移を終了したかを知りません。

上のトランジションが半透明としてマークされていないと仮定すると、下のトランジションは、上のアクティビティが不透明になったときに停止するように指示されます--onStop()。これは、移行が終了したことを意味するのではなく、上位のアクティビティのフェードインが終了したことを意味します。でも、活動が止まったらやりたいことはあまり考えられません。ただし、アクティビティが半透明の場合、これは役に立ちません。

したがって、いいえ、両方のアクティビティに遷移について認識させたい場合は、それをハックする必要があります。呼び出されたアクティビティは、(リスナーを使用して)遷移がいつ終了するかを常に認識し、呼び出し元のアクティビティは常に終了時に認識します。

27
George Mount