2013-02-12 59 views
2

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

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

编辑

我的代码结束了:

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

回答

2

我一直对类似的东西。我所做的是在我的主要FragmentActivityonCreate()部分中创建两个片段---然后基于onclick动作,我显示并隐藏适当的片段。我通过在提交隐藏listFragment之前添加到后端堆栈来补充这一点,以便当用户按下后,它们将再次获取列表,而不是之前的活动。

但是,目前,出于某种原因,我无法让GoogleMap在我的MapFragment中为空。

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

+0

我很欣赏的答案。使用show/hide是正确的。 – egfconnor 2013-02-17 23:34:09

+0

另外,只有在MapFragment中的onActivityCreated()发生之后才能检索GoogleMap,因此我使用回调来完成该部分之后的工作。如果你需要,我可以显示代码。 – egfconnor 2013-02-17 23:36:58

+0

是啊,我的代码没有完全反映,但我也注意到了。对任何人使用我的代码的另一个警告是旋转不起作用,但通过保存实例状态,这不应该太困难。 – codedawg82 2013-02-18 21:13:50