由于片段事务,多次Oncreate调用

时间:2014-05-11 15:51:02

标签: android android-fragments

主要活动,

private void navigateTo(int position) {
    Log.v(TAG, "List View Item: " + position);

    switch(position) {
    case 0:
            getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.content_frame, new Home(), Home.TAG).commit();
            break;
    case 1:
        getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.content_frame,
                    TabbedActivity.newInstance(),
                    TabbedActivity.TAG).commit();
        break;
    case 2:
        getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, History.newInstance(), History.TAG).commit();
    }
}

当我通过导航抽屉(基于上面的方法)导航到我的主片段时,它每次都运行onCreate方法。根据我的理解,当您在屏幕之间通过导航抽屉导航时,片段周期应该运行oncreateview而不是oncreate方法(因为onpause> oncreateview)。任何人都可以为我提供一个解决方案,可以确保onCreate只运行一次吗?

1 个答案:

答案 0 :(得分:2)

每次拨打navigateTo时都会创建新实例。

你应该这样做......

FragmentManager fragManager = getSupportFragmentManager();

// try to find an existing instance
Fragment frag = fragManager.findFragmentByTag(Home.TAG);
if (frag == null) {
   // if none were found, create it
   frag = new Home();
}

fragManager.beginTransaction().replace(R.id.content_frame, frag, Home.TAG).commit();