1

Необходимо восстановить маркеры, которые хранятся в HashMap<String, Marker> markers; , когда фрагмент открывается из другого действия.HashMap Store and Restore onSaveInstanceState from Fragment to another Activity

Это то, что я пробовал:

HashMap<String, Marker> markers; 
    //.. 

    @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    //.. 
    this.markers = new HashMap<String, Marker>(); 

    // Restoring the markers on configuration changes 
      if (savedInstanceState != null) { 
       if (savedInstanceState.containsKey("markers")) { 
        markers = (HashMap<String, Marker>) savedInstanceState.getSerializable("markers"); 
        if (markers != null) { 

         for (String key : markers.keySet()) { 
          Location location = 
            new Location(markers.get(key).getPosition().latitude, markers.get(key).getPosition().longitude); 
          addMarker(key, location); 
         } 
        } 
       } 
      } 

    return rootView; 
    } 

public void addMarker(String key, Location location) { 

     //if (!key.equals(strUserID)) { 
     Marker marker = this.mGoogleMap.addMarker(new MarkerOptions() 
       .position(new LatLng(location.latitude, location.longitude)) 
       .icon(BitmapDescriptorFactory.defaultMarker())); 
} 

    //... 

    @Override 
     public void onSaveInstanceState(Bundle outState) { 
      super.onSaveInstanceState(outState); 
      outState.putSerializable("markers", markers); 
     } 

Я хочу восстановить маркеры на фрагменте, когда фрагмент возобновляется из состояния паузы от другой деятельности. Для примера: Активность А содержит Fragment FA, из которого активность B называется на переднем плане, то на задней прессе снова открыт фрагмент FA:

 Activity A (Fragment FA)(Markers shown on map and should store hashmap `onSaveInstanceState(Bundle outState)` when while activity B is called) ---> Activity B ---> (On Back-pressed restore markers from hashmap `if (savedInstanceState != null)`) Fragment FA. 
+0

У вас может быть более точное представление о проблеме? –

+0

@NirDuan Я хочу сделать что-то вроде Activity A (Fragment FA) (Маркеры показаны на карте и должны хранить hashmap 'onSaveInstanceState (Bundle outState)', когда вызывается действие B) ---> Активность B ---> (Назад -pressed) снова восстанавливать метки hashmap на фрагменте FA resume 'if (savedInstanceState! = null)'. – Bhushan

ответ

1

Пожалуйста, обратите внимание, что если:

  • A не звоните finish при переключении на B
  • A сконфигурирован так, чтобы оставаться на задней стеке
  • FA сконфигурирован так, чтобы оставаться на бэк- стек

Затем, когда вы переключаетесь на B, а затем нажмите кнопку назад, A и FA будут выскочили из задней стеки, что означает, что вы получите их в том же состоянии, что они были до перехода на B. В этом случае вам ничего не нужно - ваш HashMap по-прежнему действителен и содержит правильный контент.

Однако, если система нуждается в памяти, она может решить уничтожить экземпляры Activity и Fragment, и в этом случае он будет называть onSaveInstanceState до уничтожения. Если вы сейчас вернетесь, то будут восстановлены A и FA, и он получит параметр savedInstanceState, содержащий сохраненное состояние. Просто используйте его, чтобы восстановить все, что захотите.

Практически, (при условии, что Marker класс реализован правильно) Я думаю, что ваш код отлично, за исключением одной строки в onCreateView:

this.markers = new HashMap<String, Marker>(); 

Если FA просто извлекается из резервного стека (а не воссозданы) , эта строка заставляет вас потерять текущее состояние HashMap. Я предлагаю вам поместить эту строку в onCreate или просто инициализировать эту карту по декларации:

private HashMap<String, Marker> markers = new HashMap<>(); 
+0

@ Vasilily спасибо, я инициализировал HashMap на самом объявлении, и он отлично работал, а также ошибся в коде, очищал hashmap onStop() фрагмента. – Bhushan

+0

@Bhushan, рад, что это вам помогло. Если это полностью решит ваши проблемы, пожалуйста, примите ответ – Vasiliy

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