【问题标题】:Save state of StreetViewFragment when orientation changes方向改变时保存 StreetViewFragment 的状态
【发布时间】:2016-08-15 09:38:38
【问题描述】:

我正在尝试将 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)));

    }
}

【问题讨论】:

    标签: android fragment android-savedstate


    【解决方案1】:

    在对此进行了更多修改后,我提出了以下解决方案,该解决方案保存了街景片段当前位置的状态并恢复它。效果很好。

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

    【讨论】:

      【解决方案2】:

      如果它扩展了 Fragment 类,那么使用setRetainInstance 方法呢?它允许您保存必要的变量,而不会在设备旋转时破坏您的片段。您可以从我的文章中了解此方法的用法: Simple trick to use and manage Toolbar with Fragments in Android

      【讨论】:

      • 感谢您的建议,但我不想扩展 Google 的 Fragment。
      猜你喜欢
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多