我想在用户从应用退出时关闭当前和上一个(父)活动, 但问题是,当用户从应用程序注销然后它重定向到登录活动要求用户登录,如果用户按回按钮然后它重定向到欢迎页面,如何在用户时立即关闭当前和以前(欢迎)页面退出。
这是我在菜单中的退出代码。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.Logout_secondActivity) {
session.logoutUser();
finish();
//Welcome.this.finish();
Toast.makeText(Second_activity.this, "Logout...", Toast.LENGTH_LONG)
.show();
}
}
这是Logout用户的会话管理器!,
/**
* Check login method will check user login status
* If false it will redirect user to login page
* Else won't do anything
* */
public void checkLogin(){
// Check login status
if(!this.isLoggedIn()){
// if user is not logged in redirect him to Login Activity
Intent i = new Intent(_context, Login.class);
// Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add new Flag to start new Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity
_context.startActivity(i);
}
}
这里我已经使用了标志
答案 0 :(得分:0)
添加这些标志后,您应该使用startActivity
启动所需的活动。这些将清除活动堆栈并开始新的Activity
。使用您所需的Class
名称代替Splash.class,并在您注销用户后放置此代码。
Intent i = new Intent(this, Splash.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
finish();
修改强>
我从您的问题中了解到,如果它位于活动堆栈中,您希望从HomeActivity
转到LoginActivity
。一种方法是覆盖onBackPressed
中的LoginAcitivty
。即在LoginActivity
中按下后退时,它会启动HomeActivity
。你可以这样做:
@Override
public void onBackPressed() {
Intent i = new Intent(this, HomeActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
finish(); // it is optional if you want to keep the login activity in stack you should remove this line
}
答案 1 :(得分:0)
您可以从当前活动中放置共享首选项布尔值,然后始终检查父活动中是否存在密钥(在onPostResume方法中检查它)。如果密钥存在,则完成此活动,如果不存在,则只需删除密钥。可能有更简单,更优雅的解决方案,但这个肯定会有用。
答案 2 :(得分:0)
在finishAffinity();
_context.startActivity(i);
进一步参考,您可以遵循此 https://developer.android.com/reference/android/app/Activity.html
<强>更新强>
如果从非Activity类调用此函数,则必须在调用时传递Activity的Context,如_context.finishAffinity()