如何在android中使用AsyncTask更新地图片段和列表片段时在两者之间交换

如何在android中使用AsyncTask更新地图片段和列表片段时在两者之间交换,android,android-fragments,android-maps,android-maps-v2,Android,Android Fragments,Android Maps,Android Maps V2,在使用MapView时,我这样做的策略非常简单,但现在我正在过渡到Android Maps v2,必须使用MapFragment。我的场景包括获取事件列表,然后我需要在背景中对这些事件进行地理编码,以获得它们的纬度和经度,从而计算出与用户的距离,并将其放置到地图上。我有一个actionbar按钮,允许用户在列表和映射片段之间切换,但我的问题是如何将这两个片段保留在内存中并避免它们的生命周期,以便在更新列表片段中的列表适配器时,可以不断向映射片段添加标记 目前,我用FragmentTransact

在使用MapView时,我这样做的策略非常简单,但现在我正在过渡到Android Maps v2,必须使用MapFragment。我的场景包括获取事件列表,然后我需要在背景中对这些事件进行地理编码,以获得它们的纬度和经度,从而计算出与用户的距离,并将其放置到地图上。我有一个actionbar按钮,允许用户在列表和映射片段之间切换,但我的问题是如何将这两个片段保留在内存中并避免它们的生命周期,以便在更新列表片段中的列表适配器时,可以不断向映射片段添加标记

目前,我用FragmentTransaction.replace替换FrameLayout,但这会导致另一个片段被破坏,而我只是希望它被隐藏(在我将MapView可见性设置为View.Goe之前)

编辑

我的代码是:

@Override
    public void swapFragments() {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        if (listFragment.isVisible()) {
            transaction.hide(listFragment);
            if (mapFragment.isAdded()) {
                transaction.show(mapFragment);
            } else {
                transaction.add(R.id.root, mapFragment);
            }
        } else {
            transaction.hide(mapFragment);
            transaction.show(listFragment);
        }
        transaction.commit();
    }

我一直在做类似的事情。我要做的是在我的主要
碎片活动
onCreate()
部分创建这两个碎片,然后基于onclick操作,显示并隐藏相应的碎片。作为补充,我在提交listFragment的隐藏之前将其添加到后堆栈中,这样当用户按back时,他们将再次获得列表,而不是之前的活动

然而,目前,由于某些原因,我很难让谷歌地图在我的MapFragment中不为空


我解决了这个问题--你可以在这里找到类似的答案

我很感激这个答案。使用show/hide是正确的做法。此外,在MapFragment中的onActivityCreated()似乎出现之前,Google地图无法检索,因此我使用回调来完成该部分之后的工作。如果你需要,我可以显示代码。是的,我的代码并不完全反映这一点,但我也注意到了这一点。对任何人使用我的代码的另一个警告是,旋转不起作用,但通过保存实例状态进行修复应该不会太困难。