我想从活动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:
public 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);
}
从B到A:
public void openAActivity() {
Intent intent = new Intent(context, SpotsMapActivity.class);
startActivity(intent);
}
问题是,当我按回A时,它会移动到另一个不退出应用程序的活动A.我想要做的是从A移动到B,然后从B移动到A,从A移动到退出(按下后退按钮)。
我已阅读Google docs about back navigation,但它对我不起作用。
答案 0 :(得分:1)
首先,您正在使用Activity,并且没有使用任何片段。也许你可以使用Fragments(?),当你按Back时,你基本上退出了Activity(如果你没有将碎片添加到BackStack中)。这将为您提供所需的行为。
如果您当前正在实施,那么当您从活动B按回来时,您需要退出应用程序吗?在这种情况下,当你从它移动到B时,你需要关闭活动A.只需调用finish()方法即可。把它放在startActivity(intent)调用之后:
startActivity(intent);
finish();
这应该关闭活动A然后开始B.这有点像关闭A的暴力。为了使它优雅,只要确保你关闭任何资源A可能挂在上面,以避免泄漏
正如旁注,Android启动新Activity时的预期行为是将其他Activity置于停止状态但仍在Activity堆栈中。由于您正在摆脱Android的设计原则,也许片段可能更适合您的需求 - 我不知道您究竟想要做什么但是我强烈建议人们在离开Android之前重新考虑&# 39;设计。
修改强>
当您退出B时,看起来您正在从B再次启动活动A - 实际上并不需要它。 Android会保留之前的A实例,这就是为什么当你回去时你会看到另一个A的实例
答案 1 :(得分:0)
我使用FLAGS解决了这个问题。我认为这是最优雅的方式。
public void openAActivity(){ Intent intent = new Intent(context,SpotsMapActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(意向); }