woshidan's blog

あいとゆうきとITと、とっておきの話。

ActionBarのUpナビゲーションとLaunchModeについて

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

上記のようなコードで設定するActionBarのUpナビゲーションは基本的に、

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SubActivity"
            android:label="@string/title_activity_sub"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>

のように、そのActivityの親の階層に指定したActivityを新しく生成するらしい。

そういうわけで、親の階層に当たるActivityのlaunchModeがデフォルトの場合は、Upナビゲーションを実行する度に新しくActivityが生成され、親の階層に当たるActivityのlaunchModeがsingleTopの場合は、onNewIntent()メソッドから呼び出され、新しく生成されない。

onCreate()メソッドでテキストに現在時刻をセットするActivityを親側のActivityとして、Upナビゲーションを通して子のActivityと行ったり来たりしてみた。

launchMode デフォルト

https://cloud.githubusercontent.com/assets/6694142/12511653/642a7656-c156-11e5-8809-7ec9f278b9c4.gif

launcheMode singltTop

https://cloud.githubusercontent.com/assets/6694142/12511652/64027fe8-c156-11e5-8b69-ae7355dc7d14.gif

データの読み込みのタイミングに注意したいというか、Toolbarに移行したいというか...。

actionbar-navigation-up-with-2-launche-mode · GitHub

参考

Providing Up Navigation | Android Developers