2014-09-20 3 views
5

В настоящее время я разрабатываю приложение, в котором есть меню, а один из параметров в меню - «Настройки», где пользователь может в принципе решить отключить звуки и другие подобные вещи. В настоящее время у меня есть два переключателя в настройках. Вот код Java для деятельности Настройки до сих пор:Изменение состояния переключателя 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; 

    } 
});  
} 
} 

Я могу использовать логические значения в моей другой деятельности, поэтому SharedPreference работает отлично. Однако, когда я вернусь к своей активности в меню и вернусь к этой операции с параметрами, состояние переключателей вернется к значениям по умолчанию, являющимся истинными, независимо от того, что указывает пользователь. В любом случае, я могу это исправить?

ding.setChecked(isDingChecked) 

На самом деле я ничего не делаю. Я знаю, что в прошлом я задавал вопрос, похожий на это, это просто, что у меня не было большой активности, и я уже давно занимаюсь этой проблемой. Благодаря!

ответ

16

Попробуйте что-то вроде этого:

@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

получил это спасибо! – user2677095

0

Метод коммутатора полностью работает, но вы вызываете его внутри метода onCheckedChanged(...), который не является необходимым.
Таким образом, чтобы установить Switch в самое последнее значение, вы должны загрузить Настройки и установить проверенное состояние вне слушателя 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

я должен был бы изменить IsChecked истина/ложь я верю, так как IsChecked работает только внутри слушателя, но это должно работать – user2677095

+0

Да, это правда. Фактически это просто значение по умолчанию, если нет никаких предпочтений с этим ключом. – reVerse

+0

Да, я знаю. Я получил его работать. Большое спасибо человеку. – user2677095

Смежные вопросы