Activityの画面遷移おさらい (intent.flags)

スタックの中の特定のActivityへ戻る

A => B => C => D

A => B

Dにいて、Bまで戻る

SINGLE_TOPを指定しないと一般的な戻る動作にならず、戻った画面が再構築されてしまいます。

val intent = Intent(this, B_Activity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
startActivity(intent)

今のActivityを新しいActivityに置き換える

A => B => C => D

A => B => C => E

Dにいて、新しいEと交換する

Eを追加してからDをfinishしておけばOKです。

val intent = Intent(this, E_Activity::class.java)
startActivity(intent)
finish()

フラグだけで対応できない場合は、複数回に分けて一括遷移する

A => B => C => D

A => B => E

Dにいて、Bまで戻って、Eを追加する

遷移アニメーションは1回分しか起こらないので、直接DからEへ遷移したように見えます。

val baseIntent = Intent(this, B_Activity::class.java)
baseIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
val newIntent = Intent(this, E_Activity::class.java)
startActivities(arrayOf(baseIntent, newIntent))