2014-09-20 17 views
5

Obecnie pracuję nad aplikacją z menu, a jedną z opcji menu jest "Ustawienia", w której użytkownik może zasadniczo zdecydować o wyłączeniu dźwięków i innych tego typu czynnościach. Obecnie mam dwa przełączniki w działaniu Ustawienia. Oto kod Java dla aktywności Ustawienia tej pory:Zmiana stanu przełącznika systemu Android

import android.support.v7.app.ActionBarActivity; 


public class Options extends ActionBarActivity { 
private Switch ding; 
private Switch countdown; 
public boolean isDingChecked; 
public boolean isCountdownChecked; 
public static final String PREFS = "examplePrefs"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_options); 
ding = (Switch) findViewById(R.id.switch1); 
ding.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

     SharedPreferences examplePrefs = getSharedPreferences(PREFS,0); 
     Editor editor = examplePrefs.edit(); 
     editor.putBoolean("userMessage", isChecked); 
     editor.commit(); 

     //System.out.println(examplePrefs.getBoolean("userMessage", isChecked)); 
     isDingChecked = examplePrefs.getBoolean("userMessage", isChecked); 
     System.out.println(isDingChecked + " is ding checked"); 
     ding.setChecked(isDingChecked); 
    } 
}); 

countdown = (Switch) findViewById(R.id.switch2); 
countdown.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     // do something, the isChecked will be 
     // true if the switch is in the On position 
     isCountdownChecked = isChecked; 

    } 
});  
} 
} 

jestem w stanie używać wartości logicznych w moim innej działalności, więc SharedPreference działa dobrze. Jednakże, gdy wracam do mojej aktywności w menu i wracam do tego działania opcji, stan przełączników powraca do domyślnych wartości bycia prawdziwym, niezależnie od tego, co podaje użytkownik. Czy mimo to mogę to naprawić?

ding.setChecked(isDingChecked) 

Naprawdę nic nie robię, jak sądzę. Wiem, że napisałem pytanie podobne do tego w przeszłości, po prostu nie miałem zbyt wiele aktywności i pracuję nad tym problemem od dłuższego czasu. Dzięki!

Odpowiedz

16

Spróbuj czegoś takiego:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_options); 
    ding = (Switch) findViewById(R.id.switch1); 

    //grab prefs first 
    final SharedPreferences examplePrefs = getSharedPreferences(PREFS,0); 
    final Editor editor = examplePrefs.edit(); 
    ding.setChecked(examplePrefs.getBoolean("your_key", false)); //false default 


    ding.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      //commit prefs on change 
      editor.putBoolean("your_key", isChecked); 
      editor.commit(); 

      System.out.println(isDingChecked + " is ding checked"); 
     } 
    }); 
+0

dziękuję !! – user2677095

0

Metoda Switcha działająca w trybie setChecked(value) działa zupełnie dobrze, ale wywołuje się ją w metodzie, która jest niepotrzebna.
Aby ustawić Switch na najnowszą wartość, należy załadować Preferencje i ustawić sprawdzony stan poza odbiornikiem setOnCheckedChangeListener.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_options); 
    // your current code 

    //load and set preferences 
    SharedPreferences examplePrefs = getSharedPreferences(PREFS,0); 
    isDingChecked = examplePrefs.getBoolean("userMessage", isChecked); 
    ding.setChecked(isDingChecked); 
} 
+0

musiałbym zmienić IsChecked true/false wierzę ponieważ IsChecked działa tylko wewnątrz słuchacza, ale to powinno działać – user2677095

+0

Tak to prawda. Właściwie jest to tylko wartość domyślna, jeśli nie ma żadnych preferencji z tym kluczem. – reVerse

+0

Tak, wiem. Mam go jednak do pracy. Dzięki wielkie. – user2677095

Powiązane problemy