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

时间:2013-02-12 05:02:36

标签: android android-fragments android-maps android-maps-v2

使用MapView时,我这样做的策略非常简单,但我现在正在转换到Android Maps v2并且必须使用MapFragment。我的场景涉及获取事件列表,然后我需要在后台对这些事件进行Geodecode以获得其经度和经度来计算与用户的距离以及放置到地图上。我有一个操作栏按钮,允许用户在列表和地图片段之间切换,但我的问题是如何将两个片段保留在内存中并避免其生命周期,以便我可以在更新列表适配器时不断向地图片段添加标记在列表片段?

目前我将FragmentTransaction.replace的FrameLayout替换为每个Fragment,但是这会导致另一个被破坏,而我只是希望它被隐藏(之前我只是将MapView的可见性设置为View.GONE)。 / p>

修改

我的代码最终成为:

@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();
    }

1 个答案:

答案 0 :(得分:2)

我一直在做类似的事情。我所做的是在我的主onCreate()的{​​{1}}部分创建两个片段 - 然后根据onclick动作,我显示并隐藏适当的片段。我通过在隐藏listFragment之前添加到后台堆栈来补充这一点,这样当用户按下时,它们将再次获取列表,而不是之前的活动。

但是,目前,由于某种原因,我无法在我的MapFragment中使GoogleMap无效。

我解决了这个问题 - 你可以在这里找到类似的答案MapFragment Error - CameraUpdateFactory is not initialized