重新启动应用程序时重新创建并重新销毁已销毁的片段

时间:2013-05-01 10:54:05

标签: android android-fragments android-lifecycle

我正在尝试了解Fragment的生命周期。

我有一个MainActivity,其布局包括两个FrameLayout来加载Fragments,一个用于带顶部菜单的顶部栏,另一个用于内容。

当我启动应用时,内容HomeFragment容器中会加载FrameLayout的实例。然后,当我单击菜单中的按钮时,SomeFragment的实例将替换它。

SomeFragment内容上,我点击设备的主页按钮,所有可见的Fragment(即TopBarFragmentSomeFragment)都会被销毁并分离来自MainActivity,即同时调用onDestroyViewonDestroyonDetach

现在,当我重新启动应用时,TopBarFragmentSomeFragment已创建并销毁(从onAttachonDetach的完整生命周期),然后是{{1} } TopBarFragment已创建,正如HomeFragment的{​​{1}}中的代码所预期的那样。

为什么MainActivityonCreate,即点击设备主页按钮之前的最新可见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>

0 个答案:

没有答案