2014-09-20 21 views
5

Attualmente sto sviluppando un'applicazione con un menu e una delle opzioni del menu è "Impostazioni" in cui l'utente può decidere in sostanza di disattivare i suoni e altre cose del genere. Al momento ho due opzioni nell'attività Impostazioni. Ecco il codice java per l'attività Impostazioni finora:Modifica stato di commutazione 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; 

    } 
});  
} 
} 

sono in grado di utilizzare i valori booleani nelle mie altre attività, in modo che lo SharedPreference funziona bene. Tuttavia, quando torno alla mia attività di menu e torno a questa attività delle opzioni, lo stato degli switch ritorna ai valori predefiniti di essere vero, indipendentemente da ciò che afferma l'utente. C'è comunque che posso risolvere questo?

ding.setChecked(isDingChecked) 

Non sto proprio facendo nulla, immagino. So di aver postato una domanda simile a questa in passato, è solo che uno non ha avuto molta attività e ho lavorato su questo problema per un po 'di tempo. Grazie!

risposta

16

provare qualcosa di simile:

@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

capito grazie !! – user2677095

0

Il metodo setChecked(value) funziona perfettamente ma lo si chiama all'interno del metodo onCheckedChanged(...) che non è necessario.
Quindi, per impostare Switch all'ultimo valore, è necessario caricare le Preferenze e impostare lo stato di controllo all'esterno del listener 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

avrei dovuto cambiare isChecked di vero/falso credo dal isChecked funziona solo all'interno l'ascoltatore, ma che dovrebbe funzionare – user2677095

+0

Sì che è vero. In realtà è solo un valore predefinito se non c'è alcuna preferenza con questa chiave. – reVerse

+0

Sì, lo so. Ho avuto modo di lavorare però. Grazie mille amico. – user2677095

Problemi correlati