完成背景的标志活动不起作用

时间:2016-07-07 14:52:49

标签: android android-intent android-activity

在帖子结束时使用一个(半)解决方案进行编辑

我的 MainActivity.class

中有下一个逻辑
if(SaveSharePreferences.getUserEmail().length == 0) {
    Intent intent = new Intent(MainActivity.this, LoginActivity.class);
    startActivity(intent);
    finish(); //Closing MainActivity
} else {
    Intent intent2 = new Intent(MainActivity.this, MainMenu.class);
    startActivity(intent2);
    finish(); //Closing MainActivity
}

所以在 LoginActivity.class

...
public void login() {
    Intent intent = new Intent(LoginActivity.this, MainMenu.class);
    startActivity(intent);
    finish(); //Closing LoginActivity
}
...

处理Activities的主要问题是我的MainMenu.class包含一个带有三个标签的ViewPager,并且位于我选择的不同标签(Fragments)中到一个更深的Activity或另一个。

在其中一个片段中,我有 ProfileActivity.class 选项,我在此处注销。代码是:

public void logOut() {    
    Intent intent = new Intent(ProfileActivity.this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    SaveSharedPreference.clearUser(ProfileActivity.this);
    startActivity(intent);
    finish();
}

所以应该是我的活动堆栈是空的,或者它只是在注销后包含MainActivity.class,但是当我下次登录时,MainMenu.class被打开两个,三个,四次,具体取决于我登录的当前时间。

我曾尝试使用intent.addCategory(Intent.CATEGORY_HOME),同时声明:

public class MainMenu extends AppCompatActivity {
    ...
    static Activity mainMenuActivity;
    ...
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        mainMenuActivity = this;
        ...
    }
    ...
}

然后从其他人那里关闭它,但没有任何作用。任何解决方案?

时间解决方案

Flags无法正常声明public static Activity然后手动关闭它,因此我已按以下方式编辑 AndroidManifest.xml

<activity
    android:name=".NameOfTheActivity"
    android:launchMode="singleTask">

launchMode="sigleTask"做了什么?

  

系统在新任务和路由的根目录下创建活动   意图。但是,如果活动的实例已经存在   存在,系统通过a将意图路由到现有实例   调用它的onNewIntent()方法,而不是创建一个新方法。

我避免了之前遇到过的多重问题。但是有些活动仍然开放,我无法关闭它,所以这不是一个明确的解决方案。

2 个答案:

答案 0 :(得分:0)

如果你不希望MainMenu进入堆叠状态,每次进入其他活动时都要完成它,如果你愿意,可以再次打开该活动的onBackPress。例如:从Mainmenu转到profile,如下所示在MainMenu

Intent intent = new Intent(MainMenu.this, ProfileActivity.class);
startActivity(intent);
finish();

要返回mainmenu,请在ProfileActivity中执行以下操作

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(ProfileActivity.this, MainMenu.class);
     startActivity(intent);
     finish();
}

答案 1 :(得分:0)

执行此操作时:

public void logOut() {    
    Intent intent = new Intent(ProfileActivity.this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    SaveSharedPreference.clearUser(ProfileActivity.this);
    startActivity(intent);
    finish();
}

您要求Android将任务清除回MainActivity 的现有实例。问题是您没有MainActivity的现有实例,因为您已经完成了它!

为了实现这一点,您需要始终将MainActivity留在任务堆栈中

注意:此外,您不需要Intent.FLAG_ACTIVITY_NEW_TASK,这在这种情况下无用。