我想從活動A移至活動B,然後再移至A。在片段之間移動以正確使用背部堆棧的正確方法
A是父活動,以這種方式在android.manifest定義:
<activity
android:name=".ui.map.view.AActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop"
android:windowSoftInputMode="adjustPan" />
雖然B被定義如下:
<activity
android:name=".ui.addwifi.view.BActivity"
android:noHistory="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize">
我使用這個調用來從A移動到B :
從B到Apublic void openBActivity(UserData user) {
Intent intent = new Intent(getApplicationContext(), BActivity.class);
intent.putExtra(BActivity.SSID, BActivity.getWifi_ssid().replace("\"", ""));
if (user != null) {
intent.putExtra(BActivity.LATITUDE, user.getLatitude());
intent.putExtra(BActivity.LONGITUDE, user.getLongitude());
intent.putExtra(BActivity.ZOOM_LEVEL, (int) user.zoom);
}
startActivity(intent);
}
和:
public void openAActivity() {
Intent intent = new Intent(context, SpotsMapActivity.class);
startActivity(intent);
}
問題是,當我在A中按回時,它將移動到另一個未退出應用程序的Activity A中。我想要做的是從A到B,從B到A和從A到A(退出按鈕)。
我已閱讀Google docs about back navigation但它不爲我工作。
我已經使用你的想法來調用finish(),但我認爲這不是最好的方法來做到這一點,因爲我沒有正確地訂購後退堆棧,只是完成一項活動。 –
噢..我想我現在已經看到了這個問題 - 當您再次從B啓動Activity A時,實際上是在創建一個活動A的新實例 - 這就是爲什麼您會在活動堆棧中看到A的另一個實例。看起來你正在重寫Activity B中的onBackPressed()(或可能的onDestroy())方法來啓動Activity A.那是正確的嗎?您不必啓動A的新實例 - Android會保留堆棧中Activity A的前一個實例。 – ucsunil