14

새로운 Google지도 API (v2)로 작업하고 있으며 조각에 몇 가지 문제가 있습니다. 내 애플 리케이션 (지도, 목록)에 두 조각을 가지고 있으며 사용자는 그들 사이를 전환 할 수 있습니다. 미세 지금까지 코드와 함께 작동 : Android에서 MapFragment (Maps v2) 상태를 저장하는 중

if (itemPosition == 0) { 
     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.fragmentpos, myMapFragment).commit(); 
    } else if (itemPosition == 1) { 
     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.fragmentpos, myListFragment).commit(); 
}...... 

나는지도와 함께 작동

가 다시지도 조각을 한 다음 목록 조각으로 전환하고,지도의 마지막 위치가 저장되지 않습니다. 이것은 내가 원하는 것이 아니며, 나는 "왼쪽"으로 저장 상태에 있기를 원합니다 .. 어떻게해야합니까? 나는

public void onSaveInstanceState(Bundle outState){ 
    outState.putDouble("LAT", mMap.getCameraPosition().target.latitude); 
    outState.putDouble("LON", mMap.getCameraPosition().target.longitude); 
    outState.putFloat("BEAR", mMap.getCameraPosition().bearing); 
    ... 

}

에 카메라 위치를 저장하고 onCreateView()에서 복원하려고했으나 번들은 항상 null입니다. 조각을 바꿀 경우 onSaveInstanceState가 호출되지 않습니다.

그럼 어떻게지도의 상태를 저장할 수 있습니까?

+0

당신이 내 질문에 모양과 제가 어딘지 알려 주시기 바랍니다 수 있습니다 잘못 가고 .. 여기 내 질문입니다 - http://stackoverflow.com/questions/14124354/android-supportmapfragment-with-google-map-api--2-0-giving-error – Nik

답변

16

어떻게하면됩니까? 반출 당신 replace() 조각이 오래된 조각의 견해가 파괴되는 경우

, 당신의 MapView하고, 아마의 CameraPosition.

onSaveInstanceState()은 화면 회전과 같은 구성 변경에 주로 사용됩니다. MapFragmentSupportMapFragment은 이미 CameraPosition (BTW는 Parcelable)이므로 전체 개체를 조각이 아닌 Bundle에 저장할 수 있습니다.

replace() 대신 show()hide()을 사용하면 조각과 뷰가 계속 표시 될 수 있습니다.

+0

나는 show()와 두 개의 mapfragments가있는 hide(). 첫 번째 mapfragment가 제대로로드되고 상호 작용할 수 있습니다. 그러나 탭을 전환하면 두 번째 맵 조각이 첫 번째 맵 뷰와 동일한 맵 뷰를 표시하고 해당 컨트롤은 뷰를 제어하지 않습니다. 첫 번째 mapfragment로 다시 전환하면 컨트롤이 다시 작동하기 시작합니다. 어떤 이유로 두 번째 mapfragment가 첫 번째 표면 뷰를 사용하고 있다고 가정합니다. 이 문제를 어떻게 풀 수 있습니까? – basilisk

+0

@basilisk : 내 머리 꼭대기에서, 아니. 죄송합니다! – CommonsWare

+1

빠른 답장을 보내 주셔서 감사합니다. 내가 찾으면 다시보고하고보고 할게. – basilisk

0

나는 단편의 onDestroyView() 방법으로지도상의 CameraPosition에 대한 참고를 붙임으로써이 문제를 해결했다. 그런 다음지도를 다시 입력 할 때 CameraPosition을 사용하십시오.

내 솔루션의 맥락에는 고유 한 단점이 있지만 필자는 본질적으로 맵 조각을 다른 조각 내에 중첩시켜 놓았습니다. 그래서 부모 조각의 onActivityCreated() 방법의 코드입니다 :

GoogleMapOptions mapOptions = new GoogleMapOptions(); 
    if(_savedCameraPosition != null) 
    { 
     mapOptions.camera(_savedCameraPosition); 
    } 
    else 
    { 
     // Centre on Australia 
     mapOptions.camera(CameraPosition.fromLatLngZoom(new LatLng(-24.25, 133.25), 15)); 
    } 
    _mapFragment = new SupportMapFragment().newInstance(mapOptions); 

    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.map_holder, _mapFragment); 
    fragmentTransaction.commit(); 

나중에 같은 클래스에서 그 때 나는이 :

@Override 
public void onDestroyView() 
{ 
    super.onDestroyView(); 
    _savedCameraPosition = _map.getCameraPosition(); 
}