当用户从android中的应用程序注销时,如何关闭当前和上一个活动?

时间:2016-11-04 09:45:55

标签: java android

我想在用户从应用退出时关闭当前和上一个(父)活动, 但问题是,当用户从应用程序注销然后它重定向到登录活动要求用户登录,如果用户按回按钮然后它重定向到欢迎页面,如何在用户时立即关闭当前和以前(欢迎)页面退出。

这是我在菜单中的退出代码。

@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);
            }

        }

这里我已经使用了标志

3 个答案:

答案 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()