2016-08-09 7 views
-1

Ich habe ein Formular, in dem ich die Details & ausfüllen, um den Speicherort zu erhalten, den ich verwende Google Maps. Aber wenn ich zu der Aktivität zurückkomme, nachdem ich den Standort von Karten erhalten habe, sind alle Felder null.Erstellen Sie die Instanz

Wie speichere ich den Status, bevor ich zu Karten übergehe und bekomme diesen genauen Zustand, nachdem ich von der Kartenaktivität zurückgekommen bin?

EDIT: Fragment der onCreate

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    // Here I used recreate but it didn't work 
    // getActivity.recreate(); 

    View view = inflater.inflate(R.layout.fragment_login, container, false); 
    ButterKnife.bind(this, view); 
    return view; 
} 

Von hier Ich gehe Aktivität zur Karte

@OnClick(R.id.frag_expense_lllocation) 
    public void getLocation(){ 
     UiActivity.startMapActivity(context); 
    } 

und zu der aktuellen Aktivität wieder mit ausgewähltem Ort

double lat = marker.getPosition().latitude;                
double lng =  marker.getPosition().longitude;                
String position = lat + "," + lng;   
UiActivity.startExpenseActivity(getContext(), position); 
getActivity().finish(); 
+1

Post Code .... – RajSharma

+0

@RajSharma ich meinen Code hochgeladen haben – rookieDeveloper

Antwort

0

@gaurav Sie können onSaveInstanceState() und onRestoreInstanceState() Aufruf verwenden zurück, um diese Aufgabe sehr einfach zu erledigen.

Beim ersten Rückruf müssen Sie den Zustand speichern, den Sie speichern möchten und ab dem zweiten können Sie den Zustand wiederherstellen. für weitere Informationen können Sie die Antwort von How to use onSaveInstanceState() and onRestoreInstanceState()

überprüfen
+0

muss ich beide verwenden bevor onCreate? – rookieDeveloper

+0

Nein, Sie müssen nur die Callbacks definieren, die es ist – Alok

+1

Auch diese Methoden sind Rückrufe, so dass Sie nicht anrufen müssen, alles von der Plattform betreut. – Alok

0

Wenn Ihre Aktivität zu stoppen beginnt, ruft das System onSaveInstanceState() auf, sodass Ihre Aktivität Statusinformationen mit einer Sammlung von Schlüssel/Wert-Paaren speichern kann. Die Standardimplementierung dieser Methode speichert Informationen zum Status der Ansichtshierarchie der Aktivität, z. B. den Text in einem EditText-Widget oder die Bildlaufposition einer ListView.

Um zusätzliche Statusinformationen für Ihre Aktivität zu speichern, müssen Sie onSaveInstanceState() implementieren und dem Bundle-Objekt Schlüssel/Wert-Paare hinzufügen. Zum Beispiel:

benötigen Sie

onSaveInstanceState(Bundle savedInstanceState) 

die Anwendungszustandswerte Sie dem Bundle Parameter wie folgt ändern möchten schreiben außer Kraft zu setzen:

static final String STATE_SCORE = "playerScore"; 
static final String STATE_LEVEL = "playerLevel"; 
... 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save the user's current game state 
    savedInstanceState.putInt(STATE_SCORE, mCurrentScore); 
    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); 

    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 
} 

Wiederherstellen Aktivitätszustand

Wenn Ihre Aktivität wird wiederhergestellt, nachdem sie zuvor zerstört wurde. Sie können Ihren gespeicherten Status aus dem Bundle wiederherstellen, das das System an Ihre Aktivität übergibt. Die Callback-Methoden onCreate() und onRestoreInstanceState() empfangen dasselbe Bundle, das die Instanzstatusinformationen enthält.

Da die onCreate() -Methode aufgerufen wird, ob das System eine neue Instanz Ihrer Aktivität erstellt oder eine vorherige erneut erstellt, müssen Sie überprüfen, ob der Status Bundle null ist, bevor Sie versuchen, sie zu lesen. Wenn es null ist, erstellt das System eine neue Instanz der Aktivität, anstatt eine vorherige Instanz wiederherzustellen, die zerstört wurde.

Zum Beispiel ist hier, wie Sie einige Zustandsdaten in onCreate wiederherstellen():

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); // Always call the superclass first 

    // Check whether we're recreating a previously destroyed instance 
    if (savedInstanceState != null) { 
     // Restore value of members from saved state 
     mCurrentScore = savedInstanceState.getInt(STATE_SCORE); 
     mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); 
    } else { 
     // Probably initialize members with default values for a new instance 
    } 
    ... 
} 
Verwandte Themen