簡體   English   中英

方向更改時保存StreetViewFragment的狀態

[英]Save state of StreetViewFragment when orientation changes

我正在嘗試將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)));

    }
}

在進行更多修改之后,我提供了以下解決方案,該解決方案可以保存街景片段的當前位置狀態並進行還原。 效果不錯。

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)));
    }
}

如果它擴展了Fragment類,那么使用setRetainInstance方法怎么辦? 它允許您保存設備旋轉時不會破壞片段的必要變量。 您可以從我的文章中了解有關此方法的用法: 在Android中使用和管理帶有片段的工具欄的簡單技巧

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM