2013-02-12 4 views
2

MapView를 사용하는 동안 내 전략은 매우 간단했지만 Android Map v2로 전환하고 MapFragment를 사용해야합니다. 내 시나리오는 이벤트 목록을 가져 오는 것과 관련이 있습니다. 그런 다음 위도와 경도를 사용하여 사용자와의 거리를 계산하고지도 위에 배치하려면 백그라운드에서 지오 코딩해야합니다. 사용자가리스트와 맵 프래그먼트간에 전환 할 수있게 해주는 작업 표시 줄 버튼이 있지만 문제점은 메모리에 두 프래그먼트를 유지하고 수명주기를 피하는 방법입니다. 따라서 목록 어댑터를 업데이트하는 동안 계속해서 맵 조각에 마커를 추가 할 수 있습니다. 목록 조각에?AsyncTask로 두 단편을 모두 업데이트하는 동안 안드로이드에서 맵 조각과 목록 조각을 교환하는 방법

현재 각 Fragment와 함께 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

:

편집

내 코드의 존재를했다. 내가하는 일은 내 주 FragmentActivity 부분의 onCreate() 부분에 두 단편을 생성 한 다음 onclick 액션을 기반으로 적절한 단편을 표시하거나 숨 깁니다. 필자는 listFragment를 숨기기 전에 백 스택에 추가하여이를 보완하여 사용자가 다시 누르면 이전 작업이 아닌 목록을 다시 가져옵니다.

그러나 현재로서는 MapFragment에서 Google지도가 null이 아니게하는 데 문제가 있습니다.

나는이 문제를 해결 - 당신이 여기에 비슷한 답변을 MapFragment Error - CameraUpdateFactory is not initialized

+0

내가 대답에 감사를 찾을 수 있습니다. show/hide를 사용하는 것이 올바른 일이었습니다. – egfconnor

+0

또한 MapFragment에서 onActivityCreated()가 발생하기 전까지는 GoogleMap을 검색 할 수 없으므로 콜백을 사용하여 해당 부분 이후에 작업을 수행합니다. 필요한 경우 코드를 표시 할 수 있습니다. – egfconnor

+0

예, 내 코드는 그 사실을 반영하지 않지만 그 점도 눈치 챘습니다. 다른 사람에게 내 코드를 사용하는 것에 대한 또 다른 경고는 회전이 잘 작동하지 않는다는 것입니다. 그러나 이것은 인스턴스 상태를 저장하는 것을 통해 해결하기가 너무 어렵지 않아야합니다. – codedawg82