2013-02-12 22 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