如何在应用程序处于后台后导航回特定的活动?

时间:2016-02-25 07:53:11

标签: android android-fragments android-intent

我有一个问题,当我暂停我的应用程序几分钟(让它留在后台),当我把它带回到前台时,我希望它总是返回到特定的活动。现在,如果我在一个名为HomeActivity的特定片段上,并且我想导航到我的Intent,我想在{{1}中从Fragment A拨打onResume因为无论什么时候我都认为每当我在后台恢复活动几分钟时,我的意图就会触发并带我回到HomeActivity。这是我的尝试:

FragmentA.java:

    @Override
    public void onResume(){
        super.onResume();
        Intent intent = new Intent(getActivity(), HomeActivity.class);
        if(intent != null) {
            startActivity(intent);
        }
    }

现在,似乎当我加载我的应用程序时,我的片段会在出现背景时被调用,但不会被" Home"我的应用程序从后台到前台后我希望它被调用的屏幕。顺便说一下,我的Android Manifest中的HomeActivity没有以下内容:

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

因为这是我的登录活动,当应用程序首次启动时。

然而,这似乎给我的应用程序一个白色的屏幕,我的UI没有显示,并最终崩溃我的应用程序。有什么办法可以随时导航回到我在进入任何片段的活动后,应用程序在后台(暂停,如果你愿意)几分钟后到达前台?任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

如果您使用片段使用BackStack

  String backStateName = fragment.getClass().getName();
        FragmentManager manager = getSupportFragmentManager();
        boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
        if (!fragmentPopped) { //fragment not in back stack, create it.
            FragmentTransaction ft = manager.beginTransaction();
            ft.replace(R.id.container_body, fragment);
            ft.addToBackStack(backStateName);
            ft.commit();

        }

在您要删除现有碎片的任何地方使用以下代码。

 if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
         getFragmentManager().popBackStack();      
} 

答案 1 :(得分:0)

当应用程序进入后台时,将调用activity / fragment savedStateInstance并保存outState包。

恢复应用程序时,将调用activity / fragment onCreate(Bundle savedInstanceState)。在这种情况下,savedInstanceState不为空。如果使用intent启动了活动,savedInstanceState将为null。这就是为什么即使应用程序在后台被销毁,当应用程序恢复时,edittext将包含先前输入的文本。 (activity / fragment在被销毁之前保存了它的ui状态,以便在用户返回时可以恢复ui)。

在你的片段中,

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null)       {
        Intent intent = new Intent(getActivity(), HomeActivity.class);
        startActivity(intent);
}
}

应该在后台销毁应用程序时启动HomeActivity。

<强>更新 您可以在活动中应用相同的逻辑,而不是在每个片段中重复它。即

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 if (savedInstanceState != null)       {
        Intent intent = new Intent(this, HomeActivity.class);
        startActivity(intent);
}
}

注意:您必须知道,在方向更改期间创建活动时,savedInstanceState不为空。所以这个解决方案只有在方向被锁定时才有效。

希望有所帮助......