片段未附加到屏幕旋转上的活动

时间:2016-02-02 15:03:20

标签: android android-fragments

首先让我解释一下我的应用流程。

我的MainActivity延伸了DrawerActivity。此DrawerActivity负责管理两个drawers。一个在左边,一个在右边。

MainActivity使用

启动片段
getSupportFragmentManager().beginTransaction()
                .add(R.id.activity_base_container, initialFragment, initialFragment.getClass().getSimpleName())
                .commit();

initialFragment中,向用户显示一些按钮。其中一个是显示地图的片段。如果用户按下按钮,我执行此操作:

FragmentManager fragmentManager = getFragmentManager();

FragmentMap fragment = (FragmentMap) getFragmentManager().findFragmentByTag(FragmentMap.class.getSimpleName());

if (fragment == null) {
    fragment = FragmentMap.newInstance();
    fragmentManager.beginTransaction()
        .replace(R.id.activity_base_container, fragment)
        .addToBackStack(fragment.getClass().getSimpleName())
        .commit();
}

FragmentRightDrawer fragmentRightDrawer =
    (FragmentRightDrawer) getFragmentManager().findFragmentByTag(FragmentRightDrawer.class.getSimpleName());

if (fragmentRightDrawer == null) {
    fragmentRightDrawer = FragmentRightDrawer.newInstance(fragment);
}

((DrawerActivity) getActivity()).enableRightDrawer(fragmentRightDrawer);

当地图在屏幕上可见时,用户可以打开右侧抽屉,按下按钮并在地图上绘制标记。在抽屉时间,抽屉关闭。 如您所见,默认情况下禁用右侧抽屉,必须启用右侧抽屉。在FragmentRightDrawer.newInstance(fragment);我通过地图回调,以便当用户按下右侧抽屉中的按钮时我可以收到该事件。由于右抽屉实际上是带有按钮列表的回收者视图,我还将此地图回调传递给了recyclerview适配器。

在我的FragmentMap我有方法setMarker(int buttonID);,它会收到用户点击的按钮的ID。

适配器将调用mMapListener.setMarker(buttonID);

这是按预期工作的。问题是当我旋转屏幕时。地图将重新创建并在屏幕中可见。右抽屉也重新创建,我可以打开它。问题是当我点击按钮。然后我得到java.lang.IllegalStateException: Fragment FragmentMap{425e92b0} not attached to Activity

我相信这种情况正在发生,因为mMapListener回调引用了一个" old" FragmentMap

最好的办法是什么?

0 个答案:

没有答案