Android 片段:onCreate被调用4次

Android 片段:onCreate被调用4次,android,android-fragments,fragment,android-fragmentactivity,android-listfragment,Android,Android Fragments,Fragment,Android Fragmentactivity,Android Listfragment,我有一个片段的工作模型,当我调试代码时,我看到片段onCreate被调用了4次 下面是我的代码: MyFragmentActivity class MyFragmentActivity extends FragmentActivity{ @Override public void onCreate(Bundle savedInstanceState) { if (savedInstanceState == null) { getSupportFragment

我有一个片段的工作模型,当我调试代码时,我看到片段onCreate被调用了4次

下面是我的代码: MyFragmentActivity

class MyFragmentActivity extends FragmentActivity{

@Override
    public void onCreate(Bundle savedInstanceState) {
      if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction().replace(fragmentID, new MyListFragmentt())
            .replace(detailFragmentID, new MyDetailFragment()).commit();
        }
}

@Override
    protected void onRestart() {
        getSupportFragmentManager().beginTransaction().replace(detailFragmentID, new MyDetailFragment()).commitAllowingStateLoss();
}

}
MyDetailFragment.class

class MyDetailFragment extends Fragment{

// has method like oncreate(),onCreateView(),onSaveInstanceState()
}
如何调用MyDetailFragment的oncreate?当我转到其他活动并返回,然后倾斜设备时,仅会多次调用MyDetailFragment的oncreate和onSaveInstanceState

我该如何解决这个问题呢?我已经查阅了一些关于SO的帖子,但是上面说我们需要使用
隐藏、显示
方法和其他东西?但是什么才是正确的解决方法呢

编辑

当我从上一个活动返回时,需要刷新MyDetailFragment中的数据

    i think ur recreating fragments multiple times, u do new MyListFragment everytime on onCreate function, call findFragmentByTag to get the existing fragment and set that, if null (first time) then create one
/这里有一些代码配合,如果这不起作用,并且您的应用程序只有一个片段,那么最好只创建xml并在其中只有一个片段标记,然后在setContentView函数中设置该xml*/

    // declare following member variable
    MyFragment _fragment;

    // in onCreate function, call this method

    private void setupFragment()
    {
         _fragment = (MyFragment)getFragmentManager().findFragmentByTag("MyFragment");
         if(null == _fragment)
         {
    _fragment = new MyFragment();
    }
    // now do the fragment transaction
FragmentTransaction trans = getFragmentManager().beginTransaction();
trans.add(containerId, _fragment, "MyFragment"); // here tag is important
trans.commit();
    }
试试这个

MyDetailFragment fragment = new MyDetailFragment();
@Override
    public void onCreate(Bundle savedInstanceState) {
      if (savedInstanceState == null) {

        getSupportFragmentManager().beginTransaction().replace(fragmentID, new MyListFragmentt())
            .replace(detailFragmentID, fragment).commit();
        }
}

@Override
    protected void onRestart() {
        if(fragment != null) {
        getSupportFragmentManager().beginTransaction().replace(detailFragmentID, fragment).commitAllowingStateLoss();
        }
}

似乎你正在创建相同类型片段的多个实例。你能展示一下你是如何将片段添加到activity@PulkitSethi对不起,我没听明白你的意思?在你的活动课上,你是如何添加这些片段的,你能分享你的活动代码吗?事实上,我直接调用这个MyFragmentActivity,inturn会调用MyDetailFragmentThank,是的,你可能是对的,你能告诉我怎么做吗?当我从上一个活动回到这个活动时,我想在片段中刷新数据?如何做,但MyDetailFragment中的数据是否会刷新?