从Handler调用时,Android FragmentSupportManager返回null

时间:2015-02-27 11:07:17

标签: android android-fragments android-handler orientation-changes

我正在使用导航抽屉在我的片段和处理程序之间切换,以通知当前片段有关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的引用有关,而不是与片段和片段容器有关......即使我在新线程中调用片段管理器,引用保持不变。

我感谢任何帮助,因为我不知道我能做些什么。

0 个答案:

没有答案