我正在尝试了解Fragment
的生命周期。
我有一个MainActivity
,其布局包括两个FrameLayout
来加载Fragments
,一个用于带顶部菜单的顶部栏,另一个用于内容。
当我启动应用时,内容HomeFragment
容器中会加载FrameLayout
的实例。然后,当我单击菜单中的按钮时,SomeFragment
的实例将替换它。
在SomeFragment
内容上,我点击设备的主页按钮,所有可见的Fragment
(即TopBarFragment
和SomeFragment
)都会被销毁并分离来自MainActivity
,即同时调用onDestroyView
,onDestroy
和onDetach
。
现在,当我重新启动应用时,TopBarFragment
和SomeFragment
已创建并销毁(从onAttach
到onDetach
的完整生命周期),然后是{{1} } TopBarFragment
已创建,正如HomeFragment
的{{1}}中的代码所预期的那样。
为什么MainActivity
和onCreate
,即点击设备主页按钮之前的最新可见TopBarFragment
,在执行SomeFragment
'中的内容之前重新创建并销毁s Fragment
?
注意:为了测试我的应用,我在设备的开发者选项中选中了MainActivity
选项。
MainActivity.java
onCreate
main.xml中
Don't keep activities
TopBarFragment.java
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
Fragment homeFragment = new HomeFragment();
fragmentTransaction.replace(R.id.content_container, homeFragment, "");
Fragment topBarFragment = new TopBarFragment();
fragmentTransaction.replace(R.id.top_bar_container, topBarFragment, "top_bar_fragment");
fragmentTransaction.commit();
}
}
SomeFragment
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="44dp" />
<FrameLayout
android:id="@+id/top_bar_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false" />
</RelativeLayout>