我正在使用导航抽屉在我的片段和处理程序之间切换,以通知当前片段有关ForegroundService中的更改。处理程序代码位于MainActivity类中。所有片段都显示在ID为“main_content”的容器中,并相互替换。
一切正常,我的片段在我启动Activity和Service时得到更新但是在OrientationChange之后,Handler中的片段管理器说当前片段为空。但是navigationDrawer正在工作,仍然可以确定当前显示的片段。要确定当前片段,抽屉和处理程序都使用相同的方法:
private Fragment getCurrentFragment() {
Fragment current = fragmentManager.findFragmentById(R.id.main_content);
return current;
}
即使在导航抽屉功能的方向更改后,相同的代码也能继续工作。
更新我的片段的处理程序代码如下所示:
private class UIHandler extends Handler{
private AlertDialog alert;
@Override
public void handleMessage(Message msg) {
if (msg.what == UPDATE) {
Fragment currentFragment = mfragmentManager.getCurrentFragment();
if(currentFragment instanceof BaseFragment){
((BaseFragment) currentFragment).notifyUpdateOccured();
}
}
super.handleMessage(msg);
}
}
就像我说的,上面的代码在我更改方向之前工作,然后为当前片段返回null。
现在查看在mfragmentManager中本地存储的片段管理器,同时在方向更改后进行调试:
从导航栏中调用时的参考:
FragmentManager{450c4ce0 in MainActivity{450c4a58}}
从处理程序调用时的引用:
FragmentManager{450c4ce0 in null}
所以我假设它与fragmentManager的引用有关,而不是与片段和片段容器有关......即使我在新线程中调用片段管理器,引用保持不变。
我感谢任何帮助,因为我不知道我能做些什么。