2016-08-15 2 views
0

예를 들어 사용자가 원래 Portrait에있는 경우 StreetviewPanorama의 현재 위치를 저장하려고하고 화살표를 탭하여 해당 위치를 탐색하여 StreetViewPanorama에서 위치를 변경합니다. 가로로 전환합니다. 사용자가 영역을 계속 탐색 할 수 있도록 복원 할 마지막 위치를 설정하려고합니다. 현재 streetViewPanorama는 "streetViewPanorama.getLocation()"에 액세스하려고 시도 할 때 null이지만 문제는 아닙니다. 나는 국가를 구원하는 나의 방식이 옳지 않으며 더 좋은 방법이 있어야한다고 생각한다. 그래서 나는 너의 제안을 부탁하고있다.방향 변경시 StreetViewFragment의 상태 저장

이 내 StreetViewFragment의 코드는 다음 스트리트 뷰 (Street View) 조각의 현재 위치의 상태를 저장하고 복원

public class StreetViewFragment extends ViperFragment implements OnStreetViewPanoramaReadyCallback, 
    PropertyDetailsStreetView { 
private static final String KEY_PROPERTY_ID = "property_id_street_view"; 
private static final String KEY_PROPERTY_LAT = "property_lat"; 
private static final String KEY_PROPERTY_LON = "property_lon"; 
private Bundle savedInstances; 

@Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     streetViewPanoramaFragment = (StreetViewPanoramaFragment) 
       getActivity().getFragmentManager().findFragmentById(R.id.streetviewpanorama); 
     streetViewPanoramaFragment.getStreetViewPanoramaAsync(this); 
     savedInstances = savedInstanceState; 
    } 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    outState.putDouble(KEY_PROPERTY_LAT, streetViewPanorama.getLocation().position.latitude); 
    outState.putDouble(KEY_PROPERTY_LON, streetViewPanorama.getLocation().position.longitude); 
    super.onSaveInstanceState(outState); 
} 

@Override 
public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) { 
    this.streetViewPanorama = streetViewPanorama; 
    presenter.onStreetViewPanoramaReady(getArguments().getLong(KEY_PROPERTY_ID)); 

    if (savedInstances != null) { 
     this.streetViewPanorama.setPosition(
       new LatLng(savedInstances.getLong(KEY_PROPERTY_LAT), 
         savedInstances.getLong(KEY_PROPERTY_LON))); 

    } 
} 

답변

0

나는 다음과 같은 솔루션 느릅 나무와 함께이 좀 더 땜질을 제공 한 후. 잘 작동합니다.

public class StreetViewFragment extends ViperFragment implements OnStreetViewPanoramaReadyCallback, 
    PropertyDetailsStreetView { 
private static final String KEY_PROPERTY_ID = "property_id_street_view"; 
private static final String KEY_PROPERTY_LAT = "property_lat"; 
private static final String KEY_PROPERTY_LON = "property_lon"; 
private StreetViewPanoramaFragment streetViewPanoramaFragment; 
private StreetViewPanorama streetViewPanorama; 
private Bundle localBundle; 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    streetViewPanoramaFragment = (StreetViewPanoramaFragment) 
      getActivity().getFragmentManager().findFragmentById(R.id.streetviewpanorama); 
    streetViewPanoramaFragment.getStreetViewPanoramaAsync(this); 
    this.localBundle = savedInstanceState; 

} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    if (streetViewPanoramaFragment != null) { 
     outState.putDouble(KEY_PROPERTY_LAT, 
       streetViewPanorama.getLocation().position.latitude); 
     outState.putDouble(KEY_PROPERTY_LON, 
       streetViewPanorama.getLocation().position.longitude); 
    } 
    super.onSaveInstanceState(outState); 
} 

@Override 
public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) { 
    this.streetViewPanorama = streetViewPanorama; 
    presenter.onStreetViewPanoramaReady(getArguments().getLong(KEY_PROPERTY_ID)); 

    if (localBundle != null) { 
     this.streetViewPanorama.setPosition(
       new LatLng(localBundle.getDouble(KEY_PROPERTY_LAT), 
         localBundle.getDouble(KEY_PROPERTY_LON))); 
    } 
} 
0

Fragment 클래스를 확장하는 경우 setRetainInstance 메서드는 어떻게 사용합니까? 그것은 당신이 장치가 회전 할 때 조각을 destoying하지 않는 필요한 변수를 저장할 수 있습니다. 내 기사에서이 방법의 사용법을 읽을 수 있습니다. Simple trick to use and manage Toolbar with Fragments in Android

+0

Google 고맙다고 생각하지만 Google의 단편을 확장하고 싶지 않습니다. –