片段丢失状态,如果闲置20分钟则显示空UI。我正在使用FragmentStatePagerAdapter
,我尝试调用FragmentActivity的notifyDataSetChanged
中的onStart()
。
请帮助我如何保存片段的对象和状态,并在重新加载应用时重复使用它。
答案 0 :(得分:3)
如果需要,Android可以杀死您的应用,您需要使用onSaveInstanceState
来保持您的状态。 (请记住:在onPause
中保存重要数据!)
onSaveInstanceState
存在于Activity和Fragments中,其使用方式与活动
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("integer", anInteger);
}
现在在onCreate
,onCreateView
或onActivityCreated
,你有这个参数Bundle
savedInstanceState
,它与保存的捆绑包相对应。 (检查它是否也为空。)
如果没有,也可能Android也会杀死您的FragmentManager
,因此您需要覆盖活动中的onSaveInstanceState
和onRetoreInstanceState
并恢复该片段。
也许这个答案可以帮助你解决我说的最后一件事:Using onSaveInstanceState with fragments in backstack?
答案 1 :(得分:0)
没有你的代码就很难回答。
但我可以说状态通常由savedInstanceState
通常在onActivityCreated
中,你有以下内容。在示例中,我给出了保存输入或不输入文本的布尔值。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (savedInstanceState != null) {
mHasText = savedInstanceState.getBoolean(HAS_TEXT_TAG);
} else {
// do something
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(HAS_TEXT_TAG, mHasText);
}
这只是一个例子,因为没有你的代码就很难解决问题
答案 2 :(得分:0)
Fragment
的生命周期与Activity
的生命周期密切相关。这意味着,当你的Activity
空闲时;它会杀掉所有包含的Fragments
。要存储Fragments
,您可以始终按照Fragment API保留它们。这意味着您通常会在后台使用Fragment。但是,防止Activity
结束时被破坏或丢失的最佳方法是将相关信息存储在自定义对象中,然后在Fragment
为Activity
时重新创建Fragment
恢复。
例如;我可以有一个自定义对象,可以为我的Activity
存储相关的UI值,当我的Activity
空闲或更改时,我会将这些相关值保存到我创建的自定义对象中。然后,当创建新的Activity
时;或者我的旧Fragment
已恢复;我会检索这些值并将它们放回到{{1}}的UI中。希望这有助于:)
答案 3 :(得分:0)
如果android需要内存,它会杀死正在运行的应用程序。所以你必须使用
保存对象public void onSaveInstanceState(Bundle savedState) {}
请注意,savedState必须是可序列化的。
您必须在onResume()中调用notifyDataSetChanged(),因为它确保在活动恢复时调用它。
如需详细解答,请发布您的代码。