2012-08-29 17 views
7

Pracuję nad aplikacją dla systemu Android. Jeśli naciśniesz przycisk Wstecz, stan mojej aplikacji powinien zostać zapisany .Co powinienem użyć, aby zapisać stan ..am mylić z tymi wszystkimi onPause(), onResume() lub onRestoresavedInstance() ??? z których z nich powinienem skorzystać, aby zapisać stan mojej aplikacji? Na przykład, kiedy naciśniesz przycisk wyjścia, cała moja aplikacja powinna wyjść i użyłem finish()?Zapisz stan po naciśnięciu przycisku Wstecz.

public void onCreate(Bundle savedInstanceState) 
    { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    s1=(Button)findViewById(R.id.sn1); 
    s1.setOnClickListener(this); 
    LoadPreferences(); 
    s1.setEnabled(false); 
    } 

    public void SavePreferences() 
{ 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean("state", s1.isEnabled()); 
     } 
public void LoadPreferences() 
{ 
    System.out.println("LoadPrefe"); 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     Boolean state = sharedPreferences.getBoolean("state", false); 
     s1.setEnabled(state); 
     } 
@Override 
public void onBackPressed() 
{ 
    System.out.println("backbutton"); 
    SavePreferences(); 
    super.onBackPressed(); 
} 
+0

Jeżeli czynność zamykania, należy użyć onDestroy() – Aviral

+0

Jaki stan aplikacji chcesz zapisać? niektóre wartości pola tekstowego lub listy? – VendettaDroid

+0

Zapisywanie wartości dla textbox lub innego ważnego interfejsu użytkownika można wykonać za pomocą sharedpreferences. Tak więc, nawet jeśli aplikacja wychodzi lub niszczy, można odczytać zapisane wartości z sharedpreferences. – VendettaDroid

Odpowiedz

8

Co trzeba zrobić, to zamiast używać keyCode powrotem, trzeba zastąpić poniższą metodę w swojej działalności,

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
} 

i zapisać stan swojej Buttona wykorzystaniem SharedPrefrence, i następnym razem, gdy Po wprowadzeniu aktywności otrzymasz wartość z Sharedpreference i odpowiednio ustawisz stan przycisku.

Przykład,

private void SavePreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putBoolean("state", button.isEnabled()); 
    editor.commit(); // I missed to save the data to preference here,. 
    } 

    private void LoadPreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    Boolean state = sharedPreferences.getBoolean("state", false); 
    button.setEnabled(state); 
    } 

    @Override 
public void onBackPressed() { 
    SavePreferences(); 
    super.onBackPressed(); 
} 

onCreate(Bundle savedInstanceState) 
{ 
    //just a rough sketch of where you should load the data 
    LoadPreferences(); 
} 
+0

Zrozumiałem kod. To jest mój sir aplikacji, gdzie użytkownik wybiera cel podróży za pomocą mapy google. Aplikacja śledzi obecną lokalizację użytkownika, a kiedy użytkownik dociera do celu, odkłada alarm. Więc muszę zapisać stan mojego przycisku, GPS musi być uruchomiony w tle, dźwięk alarmowy wybrany przez użytkownika musi zostać zapisany, stan przycisku drzemki musi być włączony. Więc jak powiedziałeś, muszę zdefiniować SavePreferences i LoadPreferences dla wszystkich przycisków, których używam ???? – Sindu

+0

Tak, możesz zapisać wszystkie prymitywne typy danych za pomocą opcji Współdzielone preferencje. Zmodyfikuj powyższy kod zgodnie z wymaganiami i powinieneś być gotowy. Pobierz wszystkie stany przycisku i zapisz go z inną wartością klucza. również utrzymuj nazwę tonu za pomocą klucza strunowego i użyj go, gdy wrócisz. –

+0

Czy mogę używać funkcji onPause lub onResume, aby moje wystąpienie zostało zapisane zamiast tych SharedPreferences? – Sindu

3

można używać w ten sposób

public void onBackPressed() { 
    // Save settings here 
}; 

Wywoływana, gdy aktywność wykrył Naciśnij użytkownika z tyłu klucza. Domyślna implementacja kończy działanie bieżące, ale możesz to zmienić, aby zrobić cokolwiek chcesz.

Zapisz stan aplikacji w tej metodzie.

Powiązane problemy