2016-08-15 18 views
0

StreetviewPanoramaの現在の位置をStreetViewFragmentに保存しようとしています。たとえば、ユーザーが元々Portraitになっていて、矢印をタップして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))); 
    } 
} 
0

フラグメントクラスを拡張する場合は、setRetainInstanceメソッドを使用するとどうなりますか?これは、デバイスが回転しているときにフラグメントを破壊しないように、必要な変数を保存することを可能にします。私の記事からこの方法の使い方を読むことができます: Simple trick to use and manage Toolbar with Fragments in Android

+0

Googleの断片を拡張したくないです。 –

関連する問題