2015-04-08 2 views
0

Я делаю приложение, когда я устанавливаю определенные флажки, позволяя использовать другие флажки, и я хотел бы сохранить эти состояния. Я пытаюсь использовать sharedPreferences, но это не дает мне результатов, я не знаю, почему. Кто-то может помочь мне с кодом?Хранить несколько состояний флажков (включено/отключено)

Сохранение состояния:

private void saveContadors() { 
    saved=true; 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putBoolean("c0", contador0.isEnabled()); 
    editor.putBoolean("c1", contador1.isEnabled()); 
    editor.putBoolean("c2", contador2.isEnabled()); 
    editor.putBoolean("c3", contador3.isEnabled()); 
    editor.putBoolean("c4", contador4.isEnabled()); 
    editor.putBoolean("c5", contador5.isEnabled()); 
    editor.putBoolean("c6", contador6.isEnabled()); 
    editor.putBoolean("c7", contador7.isEnabled()); 
    editor.putBoolean("c8", contador8.isEnabled()); 
    editor.putBoolean("c9", contador9.isEnabled()); 
    editor.putBoolean("c10", contador10.isEnabled()); 
    editor.putBoolean("c11", contador11.isEnabled()); 
    editor.putBoolean("c12", contador12.isEnabled()); 
    editor.commit(); 
} 

Загрузка состояний:

private void loadContadors() { 
    Toast.makeText(this, "load"+contador6.isEnabled(), Toast.LENGTH_SHORT).show(); 

    if(saved==true){ 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

     /*for (int i = 0; i < contador.length; i++) 
      contador[i].setEnabled(prefs.getBoolean("contador" + i, true));*/ 
     contador0.setEnabled(prefs.getBoolean("c0", false)); 
     contador1.setEnabled(prefs.getBoolean("c1", false)); 
     contador2.setEnabled(prefs.getBoolean("c2", false)); 
     contador3.setEnabled(prefs.getBoolean("c3", false)); 
     contador4.setEnabled(prefs.getBoolean("c4", false)); 
     contador5.setEnabled(prefs.getBoolean("c5", false)); 
     contador6.setEnabled(prefs.getBoolean("c6", false)); 
     contador7.setEnabled(prefs.getBoolean("c7", false)); 
     contador8.setEnabled(prefs.getBoolean("c8", false)); 
     contador9.setEnabled(prefs.getBoolean("c9", false)); 
     contador10.setEnabled(prefs.getBoolean("c10", false)); 
     contador11.setEnabled(prefs.getBoolean("c11", false)); 
     contador12.setEnabled(prefs.getBoolean("c12", false)); 



      for(i=0;i<contador.length;i++){ 
       if(contador[i].isEnabled()){ 
        contador[i].setBackgroundResource(R.drawable.amarillo); 
       } 

       if(contador[i].isEnabled() && contador[i].isChecked()){ 
        contador[i].setBackgroundResource(R.drawable.naranja);   
       } 

       if(!contador[i].isEnabled()){ 
        contador[i].setBackgroundResource(R.drawable.gris); 
       } 

       if(contador[i].isEnabled() && !contador[i].isChecked()){ 
        contador[i].setBackgroundResource(R.drawable.amarillo); 
        } 
       } 

    } 
} 

И называя эти методы:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    saveContadors(); 
    Toast.makeText(this, "save", Toast.LENGTH_SHORT).show(); 

} 

@Override 
protected void onResume() { 
    super.onPostResume(); 
    loadContadors(); 

} 

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
    saveContadors(); 
    Toast.makeText(this, "save"+contador6.isEnabled(), Toast.LENGTH_SHORT).show(); 

} 

Я хочу сохранить, если включена или отключена. Я не хочу сохранять, если выбрано.

+0

editor.commit(); отсутствует – markas

+0

Да, я забыл это сделать, но это не проблема. Это все равно не работает (я редактировал код) –

ответ

0

Мой код был в порядке. Ошибка не спасла логическое «спасенное» !. Ошибочная ошибка. Код будет выглядеть следующим образом:

private void saveContadors() { 
     saved=true; 

...

private void loadContadors() { 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
     saved=prefs.getBoolean("saved", false); 
0

Взгляните на CheckBoxPreference: http://developer.android.com/reference/android/preference/CheckBoxPreference.html

Это запеченный в SharedPreferences по умолчанию, так что делает обновление префов ветра.

+0

Знаете ли вы, что это единственный способ? becouse я должен изменить большую часть моего кода –

+0

@PabloVillar Поскольку у вас есть много флажков я предлагаю использовать это или SQLiteDatabase http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html –

+0

Нет, это не единственный способ, но это не очень много кода - почему бы не использовать самое чистое решение? – StiggyBr0