如何解决后退时从 onCreate() 开始片段
我有两个片段。 fragment1 的 onCreate() 中有一些代码。 当我在 fragment2 并按回时,它会转到 fragment1 并从 onCreateView() 开始。但我需要运行 onCreate() 中的代码。
活动中:
getSupportFragmentManager().beginTransaction().
replace(R.id.host_fragment,new Fragment1()).commit();
在 fragment1 中,我有导航到 fragment2 的按钮:
getParentFragmentManager().beginTransaction().addToBackStack("").
replace(R.id.host_fragment,Fragment2).commit();
而且我在活动中没有任何 onBackPressed() 代码。
有片段的Activity,不是 MainActivity.java
谢谢。
解决方法
我想,你不必那样做,已经可以了。当您将 fragment1 放入 backstack 然后按返回时,仅当先前实例化的 fragment1 实例在内存中时才会调用 fragment1 的 onCreateView()
。如果不在内存中,则相应地调用所有片段生命周期回调,包括 onCreate()
。
因此,如果您在 onCreate()
中进行非图形初始化,当您按下返回键时,它们已经初始化;或者如果它是新创建的,则至少要进行初始化。所有这些都将由片段管理器管理。
您是否有任何理由将代码放在 OnCreate()
中?
如果没有,则将您的代码放在 OnCreateView()
中,因为 OnCreateView()
在 OnCreate()
之后被调用。因此,如果您想在片段创建时调用该代码,则可以保证调用您的代码。
此外,如果您查看片段生命周期,您会发现如果一个片段从 backstack 返回,它的 OnCreateView()
方法将被调用。因此,当您从第二个片段返回时,您的代码将运行。
简单的工作流程是将您每次都需要执行的代码从 onCreate()
方法移动到 onResume()
。
onResume()
每次当用户关注屏幕时调用。或者从背景到前景。
谢谢大家的回答。
一开始我以为我的问题只是因为onCreate()
,但是当我将代码放入onCreateView()
后,我的问题仍然存在。
所以,我决定在 Back Pressed 时重新启动片段。所以我想出了这个解决方案:
在活动中:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
getSupportFragmentManager().beginTransaction().
replace(R.id.host_fragment,new Fragment1()).commit();
} else {
super.onBackPressed();
}
}
这样有效吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。