Android 片段:onCreate被调用4次
我有一个片段的工作模型,当我调试代码时,我看到片段onCreate被调用了4次 下面是我的代码: MyFragmentActivityAndroid 片段: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
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中的数据是否会刷新?