我有4个活动:
我有2个问题。
首先,当用户成功从IntroActivity
登录时,我想从堆栈中删除LoginActivity
。无法使用android:noHistory="true"
,因为当用户决定使用Facebook登录而不是电话或电子邮件时,IntroActivity
应该在堆栈中。
第二,当用户从任何活动中注销时,我想回到MainActivity
并清除所有返回堆栈。我将在以后添加活动。正确的方法是什么?
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.Launcher"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".intro.IntroActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
<activity
android:name=".authentication.LoginActivity"
android:parentActivityName=".intro.IntroActivity"
android:noHistory="true" />
答案 0 :(得分:0)
您可以使用startActivityForResult
启动IntoActivity,成功登录后可以在LoginActivity中设置结果RESULT_OK
,然后在IntroActivity onActivityResult
中检查结果代码并完成IntoActivity。
答案 1 :(得分:0)
要在成功登录后从堆栈中删除IntroActivity
,我可以这样做:
假设成功登录后也应该完成LoginActivity
(从堆栈中删除),则可以调用startActivity()
返回到IntroActivity
,并在{{ 1}}告诉Intent
开始IntroActivity
并完成自身。这样做:
在ContainerActivity
中:
LoginActivity
在Intent intent = new Intent(this, IntroActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("startContainerActivity", true);
startActivity(intent);
finish();
中:
IntroActivity.onNewIntent()
if (intent.hasExtra("startContainerActivity")) {
Intent launchIntent = new Intent(this, ContainerActivity.class);
startActivity(launchIntent);
finish();
}
然后将启动IntroActivity
并完成自身,离开堆栈:ContainerActivity
。
要从任何其他MainActivity->ContainerActivity
返回到MainActivity
,只需覆盖Activity
并返回到onBackPressed()
。
MainActivity
当您指定标志@Override
public void onBackPressed() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
finish();
}
和CLEAR_TOP
时,这会告诉Android删除目标SINGLE_TOP
上方的所有活动并重用目标Activity
(即:不创建目标Activity
的新实例)。在这种情况下,将在Activity
的现有实例上调用onNewIntent()
。