2016-08-15 90 views
0

我試圖保存StreetViewPragora的當前位置,例如,如果用戶最初是在肖像中,並通過點擊箭頭和探索區域來更改StreetViewPanorama中的位置然後切換到橫向我想設置要恢復的最後一個位置,以便用戶可以繼續探索該區域。目前,當我嘗試訪問「streetViewPanorama.getLocation()」時,streetViewPanorama爲Null,但這不是問題。我認爲我拯救國家的方式是不對的,應該有更好的辦法。所以我請求你的建議,請!在方向更改時保存StreetViewFragment的狀態

這是我StreetViewFragment代碼:

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))); 
    } 
} 
相關問題