0

StreetViewPanorama の現在の位置を StreetViewFragment に保存しようとしています。たとえば、ユーザーがもともと縦向きで、矢印をタップして StreetViewPanorama の場所を変更し、領域を探索してから横向きに切り替えた場合、ユーザーがエリアの探索を続行できるように、復元する最後の場所。現在、「streetViewPanorama.getLocation()」にアクセスしようとすると、streetViewPanorama は Null になりますが、これは問題ではありません。状態を保存する私の方法は正しくなく、より良い方法があるはずだと思います。だから私はあなたの提案を求めています、お願いします!

これは私の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)));

    }
}
4

2 に答える 2

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)));
    }
}
于 2016-08-15T10:07:18.473 に答える