Android FragmentManager findFragmentById第二次返回null

Android FragmentManager findFragmentById第二次返回null,android,android-fragments,Android,Android Fragments,我正在活动的onCreate()方法上添加一个片段。然后,我尝试使用findFragmentByTag()访问它。它第一次工作,但是如果我回击关闭活动并再次启动它,findFragmentByTag()将返回null 在这两种情况下,片段在我的活动中都是可视的。当我关闭活动时,将调用片段的onDestroy()方法 我使用replace()而不是add()得到了相同的结果,并使用findFragmentById()而不是findFragmentByTag() MyActivity.java 导入

我正在活动的onCreate()方法上添加一个片段。然后,我尝试使用findFragmentByTag()访问它。它第一次工作,但是如果我回击关闭活动并再次启动它,findFragmentByTag()将返回null

在这两种情况下,片段在我的活动中都是可视的。当我关闭活动时,将调用片段的onDestroy()方法

我使用replace()而不是add()得到了相同的结果,并使用findFragmentById()而不是findFragmentByTag()

MyActivity.java

导入android.support.v4.app.FragmentManager;
导入android.support.v7.app.AppActivity;
公共类MyActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(最终捆绑包savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_布局);
最终MyFragment片段=新MyFragment();
final FragmentManager fm=getSupportFragmentManager();
//getFragments()返回null
fm.beginTransaction()
.add(R.id.content\u框架,片段,“MyFragment”)
.commit();
}
私有void onReceiveData(){
final FragmentManager fm=getSupportFragmentManager();
//getFragments()返回包含一个null元素的数组(第一次尝试时除外)
final MyFragment fragment=(MyFragment)fm.findffragmentbytag(“MyFragment”);
//片段为空,除非在MyActivity的第一次启动期间
}
}
MyFragment.java

导入android.support.v4.app.Fragment;
公共类MyFragment扩展了Fragment{
...
}
R.layout.activity\u布局



你知道为什么findFragmentByTag()只在第一次工作吗?

我找到了问题的原因。它实际上很简单,与上面发布的代码无关

这是由EventBus引起的,当我从网络接收数据时,我使用EventBus调用
onReceiveData
方法。我忘记用MyActivity
onDestroy
方法取消订阅EventBus,这导致了这种奇怪的行为


无论如何谢谢你

我找到了问题的原因。它实际上很简单,与上面发布的代码无关

这是由EventBus引起的,当我从网络接收数据时,我使用EventBus调用
onReceiveData
方法。我忘记用MyActivity
onDestroy
方法取消订阅EventBus,这导致了这种奇怪的行为


无论如何谢谢你

当调用onReceiveData时??getSupportFragmentManager().executePendingTransactions()@AshishAgrawal当我从网络接收数据时调用它。我在onResume()上调用该请求。是否尝试用替换来代替添加片段addToBackStack@AshishAgrawal是的,正如我在帖子中所说。当调用onReceiveData时??getSupportFragmentManager()。executePendingTransactions()@AshishAgrawal,当我从网络接收数据时会调用它。我在onResume()上调用该请求。是否尝试用替换来代替添加片段addToBackStack@AshishAgrawal是的,正如我在帖子上说的。