2014-09-20 17 views
5

Ich entwickle derzeit eine App, die ein Menü hat, und eine der Optionen im Menü ist "Einstellungen", wo der Benutzer im Grunde entscheiden kann, Sounds und andere Dinge wie diese auszuschalten. Ich habe derzeit zwei Schalter in der Aktivität Einstellungen. Hier ist der Java-Code für die Aktivität Einstellungen so weit:Ändern Android Switch-Status

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; 

    } 
});  
} 
} 

Ich bin in der Lage, die Boolesche Werte in meiner anderen Aktivität zu verwenden, so dass die SharedPreference gut funktioniert. Wenn ich jedoch zu meiner Menüaktivität zurückkehre und zu dieser Optionsaktivität zurückkehre, wird der Status der Schalter wieder auf die Standardwerte zurückgesetzt, unabhängig davon, was der Benutzer angibt. Kann ich das irgendwie beheben?

ding.setChecked(isDingChecked) 

Ist nicht wirklich etwas, denke ich. Ich weiß, dass ich in der Vergangenheit eine ähnliche Frage gestellt habe, es ist nur, dass man nicht viel aktiv war und ich arbeite seit einiger Zeit an diesem Thema. Vielen Dank!

Antwort

16

so etwas wie dieses Versuchen:

@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

hab es dank !! – user2677095

0

Die setChecked(value) Methode des Switch funktioniert völlig in Ordnung, aber Sie nennen es innerhalb der onCheckedChanged(...) Methode, die unnötig ist.
Um also den Switch auf den neuesten Wert zu setzen, sollten Sie die Einstellungen laden und den aktivierten Status außerhalb des setOnCheckedChangeListener Listeners setzen.

@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

ich isChecked ändern müsste, um wahr/falsch ich glaube erst seit isChecked im Inneren des Hörers arbeitet, sollte aber das funktioniert – user2677095

+0

Ja, das ist wahr. Eigentlich ist es nur ein Standardwert, wenn dieser Schlüssel keine Präferenz hat. – reVerse

+0

Ja, ich weiß. Ich habe es aber zur Arbeit gebracht. Vielen Dank Alter. – user2677095