我有一个问题,当我暂停我的应用程序几分钟(让它留在后台),当我把它带回到前台时,我希望它总是返回到特定的活动。现在,如果我在一个名为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没有显示,并最终崩溃我的应用程序。有什么办法可以随时导航回到我在进入任何片段的活动后,应用程序在后台(暂停,如果你愿意)几分钟后到达前台?任何帮助,将不胜感激。谢谢!
答案 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
不为空。所以这个解决方案只有在方向被锁定时才有效。
希望有所帮助......