在android中,Fragment上的onstart()被调用了两次
我有一个活动,我有一个片段。在片段的onStart()中,我有所有的网络调用。当应用程序来自后台时,onStart()会被调用两次,所有网络都会被调用两次,我还观察到onCreate()只被调用一次。有人遇到过这样的问题。请帮我解决。 我的片段事务代码如下在android中,Fragment上的onstart()被调用了两次,android,android-fragments,Android,Android Fragments,我有一个活动,我有一个片段。在片段的onStart()中,我有所有的网络调用。当应用程序来自后台时,onStart()会被调用两次,所有网络都会被调用两次,我还观察到onCreate()只被调用一次。有人遇到过这样的问题。请帮我解决。 我的片段事务代码如下 MainFragment myFragment = new MainFragment (); FragmentManager fragmentManager = getSupportFragmentManag
MainFragment myFragment = new MainFragment ();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, myFragment, "MyFragment");
fragmentTransaction.commitAllowingStateLoss();
提前感谢 尝试在替换之前检查片段是否已添加
final FragmentManager fragmentManager = getSupportFragmentManager();
final Fragment content = fragmentManager.findFragmentById(R.id.content_frame);
if (content == null || !(content instanceof MainFragment)) {
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
final MainFragment myFragment = new MainFragment();
fragmentTransaction.replace(R.id.content_frame, myFragment, "MyFragment");
fragmentTransaction.commitAllowingStateLoss();
}
commit
或committeallowingstateloss
是一个异步执行,因此fragmentManager.findframentbyid(R.id.content\u frame)
将在第一次提交
完成之前执行null
,这将导致调用两次替换
。
您可以调试onStart
函数,并查看当前Fragment
对象的hashCode
我将commit
替换为commitNow
:
FragmentManager FragmentManager=activity.getFragmentManager();
Fragment lifeFragment=fragmentManager.findFragmentByTag(TAG_Fragment);
if(lifeFragment==null | |!(lifeFragment的lifeFragment实例)){
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.N){
fragmentManager.beginTransaction()
.add(新的生命片段(),标记_片段)
.commitNowAllowingStateLoss();
}否则{
fragmentManager.beginTransaction()
.add(新的生命片段(),标记_片段)
.commitAllowingStateLoss();
}
}
仍然没有运气same@ARPаR.id.content_框架的所有片段都是MainFragment的实例,它将失败。是这样吗?请发布您的onCreate方法。我怀疑onStart()的一个调用来自片段的另一个实例。