2015-07-26 2 views
0

Я столкнулся с множеством вопросов по StackOverflow, но не смог заставить этот код работать. Флажок всегда проверяется, когда создается действие.Как сохранить статус флажка в android

Мой код:

@Override 
     public void onStart() { 
      super.onStart(); 
      chb1.setChecked(load1()); 
     } 

     @Override 
     public void onPause() { 
      super.onPause(); 
      save1(chb1.isChecked()); 
     } 

     @Override 
     public void onResume() { 
      super.onResume(); 
      chb1.setChecked(load1()); 
     } 
    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_screen_lock); 
    chb1 = (CheckBox) findViewById(R.id.checkBox2); 
    chb1.setOnClickListener(new View.OnClickListener() 
      { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        if(chb1.isChecked()) 
        { 
         SharedPreferences sharedPreferences1 = getPreferences(Context.MODE_PRIVATE); 
         SharedPreferences.Editor editor = sharedPreferences1.edit(); 
         editor.putBoolean("checked", true); 
         editor.commit(); 
    } 
private boolean load1() { 
     SharedPreferences sharedPreferences1 = getPreferences(Context.MODE_PRIVATE); 
     return sharedPreferences1.getBoolean("checked", false); 
    } 
private void save1(final boolean isChecked) { 

      SharedPreferences sharedPreferences1 = getPreferences(Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = sharedPreferences1.edit(); 
      editor.putBoolean("checked", true); 
      editor.commit(); 
    } 

Как я могу сделать эту работу? Любая помощь приветствуется.

+0

Вы предпочитаете хранить предпочтение, но не выбираете из этого, что вам нужно делать. – Pankaj

ответ

1

Вам не нужно onStart, так как он будет работать на Resume в любом случае.

Еще один момент: вы устанавливаете прослушиватель на флажке и сохраняете только, когда установлен флажок, поэтому он никогда не будет установлен в false, и именно поэтому ваш флажок всегда проверяется при открытии активности.

Настоящая версия, надеюсь, это работа. :)

@Override 
public void onPause() { 
    super.onPause(); 
    save1(chb1.isChecked()); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    setCheckBoxFromSave(); 
} 

private void setCheckBoxFromSave() { 
    bool loadedChecked = load1(); 
    if (chb1.isChecked() != loadedChecked) { 
     chb1.setChecked(loadedChecked); 
    } 
} 

private static final String KEY_CHECKED_SAVE = "checked"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_screen_lock); 

    chb1 = (CheckBox) findViewById(R.id.checkBox2); 
    setCheckBoxFromSave(); 
    chb1.setOncheckListener(new CheckBox.OnCheckListener() { 
     @Override 
     public void onCheck(boolean check) { 
      save1(check); 
     } 
    }); 
} 

private SharedPreferences getSharedPreferences() { 
    return PreferenceManager.getDefaultSharedPreferences(this); 
} 

private boolean load1() { 
    return getSharedPreferences().getBoolean(KEY_CHECKED_SAVE, false); 
} 
private void save1(final boolean isChecked) { 
    SharedPreferences.Editor editor = getSharedPreferences().edit(); 
    editor.putBoolean(KEY_CHECKED_SAVE, true); 
    editor.apply(); 
} 
+0

Я сделал то, что вы предложили, но проблема не устранена. Я отредактировал вопрос и добавил методы load1() и save1(), есть ли какие-либо проблемы с этими методами? –

+0

У меня есть обновленный код, чтобы быть более понятным. Возможно, некоторые синтаксические ошибки, но он должен работать уже с тех пор, как логика правильная. Если он все еще не работает, пожалуйста, проверьте, что setOncheckListener действительно вызван, добавив Log.e и проверьте, правильно ли это переменная. И ваш флажок установлен с самого начала? Если да, попробуйте установить chb1.setChecked (false) в onCreate. Если он все еще установлен, должно быть что-то еще неправильно. Убедитесь, что вы проверяете все логические переменные на каждом шаге. :) – spicydog

+0

Спасибо, это сработало. –

2

Вы можете сделать это так:

Сохранить состояние из CheckBox по SharedPreference:

OnClick из CheckBox:

SharedPreferences sharedPreferences1 = getSharedPreferences("sp_title", Activity.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPreferences1.edit(); 
editor.putBoolean("checked", chb1.isChecked()); 
editor.commit(); 

Теперь получитьсек Тейт из CheckBox:

на OnCreate():

SharedPreferences sharedPreferences1 = getSharedPreferences("sp_title", Activity.MODE_PRIVATE); 
boolean isChecked = sharedPreferences1.getBoolean("checked", false); 

Теперь установитьсостояния из Checkbox:

chb1.setChecked(isChecked); 

Надеется, что это поможет.

+0

Я проверилTextViews в ящике навигации, поэтому я не смог установить каждый флажок отдельно, поскольку я использую mDrawerList. Я использовал mDrawerList.setItemchecked (int position, boolean value) и использовал getDefaultPreferences для загрузки значений onCreate и того же, чтобы сохранить onItemClick. Спасибо –