2016-08-15 6 views
0

Я пытаюсь сохранить текущую позицию StreetViewPanorama в StreetViewFragment, например, если пользователь изначально находится в Portrait и изменяет местоположение в StreetViewPanorama, нажав на стрелки и исследуя область и затем переключается на Пейзаж. Я хочу установить последнее место для восстановления, чтобы пользователь мог продолжить изучение области. В настоящее время streetViewPanorama является Null, когда я пытаюсь получить доступ к «streetViewPanorama.getLocation()», но это не проблема. Я думаю, что мой способ спасти государство не прав, и должен быть лучший способ. Поэтому я прошу ваших предложений, пожалуйста!Сохранение состояния 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

Дав это немного больше мастерить я пришел со следующим Wich решение сохраняет состояние текущей позиции фрагмента просмотра улиц и восстанавливает его. Работает хорошо.

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

Если он расширяет класс Fragment, то, что об использовании setRetainInstance метода? Он позволяет сохранять необходимые переменные (ы), не уничтожая ваш фрагмент, когда устройство вращается. Вы можете прочитать об использовании этого метода из моей статьи: Simple trick to use and manage Toolbar with Fragments in Android

+0

Благодарим вас за предложение, но я не хочу распространять фрагмент Google. –

Смежные вопросы