Autore Topic: savedInstanceState sempre nullo  (Letto 390 volte)

Offline array81

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
    • MartinZone
  • Dispositivo Android:
    OnePlus One, Nexus S
  • Play Store ID:
    MartinZone
  • Sistema operativo:
    Windows 7
savedInstanceState sempre nullo
« il: 30 Maggio 2014, 19:03:45 CEST »
0
L'activity principale della mia app implementa FragmentActivity. In questa activity c'è una mappa (google maps) nella quale vengono visualizzati alcuni markers i cui parametri sono salvati in un array.
Quando l'utente dall'activity principale richiama una secondaria quindi torna a quella principale ho la necessità di "ridisegnare" aggiungendo di nuovo i markers e spostando la camera in modo che risulti esattamente a come era prima dell'apertura dell'activity secondaria.

Per fare questo pensavo di usare onSaveInstanceState per salvare lo stato dell'activity, riporto quindi di seguito il mio codice:

Codice (Java): [Seleziona]
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);

        savedInstanceState.putDouble("mCurrentMapCenterLatitude", mCurrentMapCenterLatitude);
        savedInstanceState.putDouble("mCurrentMapCenterLongitude", mCurrentMapCenterLongitude);
        savedInstanceState.putFloat("mCurrentMapZoom", mCurrentMapZoom);

        ArrayList<MapPointsParcelable> list;
        list = new ArrayList<MapPointsParcelable>();

        for (MapPoint aMapPointsList : MapPointsList) {
            list.add(new MapPointsParcelable(aMapPointsList.name, aMapPointsList.latitude, aMapPointsList.longitude, aMapPointsList.status, aMapPointsList.kind, aMapPointsList.realname, aMapPointsList.selected));
        }

        savedInstanceState.putParcelableArrayList("MapPointsList", list);
    }

sorvolando ora il problema della classe MapPointsParcelable, che spero essere scritta correttamente e che mi occorre per salvare l'array con i dati dei markers, il mio problema e che quando controllo la savedInstanceState in onCreate questo risulta sempre nullo:

Codice (Java): [Seleziona]
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        setUpMapIfNeeded();

        if (savedInstanceState != null) {
            mCurrentMapCenterLatitude = savedInstanceState.getDouble("mCurrentMapCenterLatitude");
            mCurrentMapCenterLongitude = savedInstanceState.getDouble("mCurrentMapCenterLongitude");
            mCurrentMapZoom = savedInstanceState.getFloat("mCurrentMapZoom");

            MapPointsList.clear();
            MapPolylinesList.clear();

            ArrayList<MapPointsParcelable> list;
            list = savedInstanceState.getParcelableArrayList("MapPointsList");

            for (MapPointsParcelable aList : list) {
                MapPoint mapPoint = new MapPoint(aList.name, aList.latitude, aList.longitude, aList.status, aList.kind);
                mapPoint.selected = aList.selected;
                MapPointsList.add(mapPoint);
            }

            mapRestore = true;
        }
    }

Ho anche provato ad usare onRestoreInstanceState ma in questo caso il problema è che non è mai richiamato.

Non capisco se sbaglio a salvare i dati o a ripristinarli, ho trovato un sacco di esempi in internet a riguardo e mi sembra di aver fatto quello che generalmente è riportato in questi esempi.