2014-11-17 2 views
0

Кажется, что я делаю что-то неправильно, так как всякий раз, когда я открываю фрагмент, все флажки отмечены.Сохранение состояния флажка в SharedPreferences

Но когда я нажимаю на один из них для снятия отметки, я снова вызываю метод savePreference, где checkBox.isChecked является ложным. Но внутри метода значение равно true. Поэтому я предполагаю, что каждый раз, когда я запускаю приложение, флажки всегда проверяются.

EDIT: IsChecked всегда возвращает меня так, даже когда я снимите

Вот мой код:

public class FilterAdapter extends BaseAdapter { 

    private Context mContext; 
    private ArrayList<String> mFilters; 
    private ArrayList<Integer> mPictures; 
    private Typeface Bebas, DroidSans; 
    private CheckBox checkBox; 


    public FilterAdapter(Context context, ArrayList<String> filters, ArrayList<Integer> pictures) { 
     this.mContext = context; 
     this.mFilters = filters; 
     this.mPictures = pictures; 
    } 

    @Override 
    public int getCount() { 
     return mFilters.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return mFilters.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      LayoutInflater mInflater = (LayoutInflater) 
        mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
      convertView = mInflater.inflate(R.layout.category_filter_item, null); 
     } 

     checkBox = (CheckBox) convertView.findViewById(R.id.check_box); 
     checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) 
        savePreferences("CheckBox_Value", checkBox.isChecked()); 
       else { 
        savePreferences("CheckBox_Value", checkBox.isChecked()); 
       } 

      } 
     }); 

     loadSavedPreferences(); 

     DroidSans = Typeface.createFromAsset(mContext.getAssets(), "fonts/DroidSans.ttf"); 

     ImageView filter_img = (ImageView) convertView.findViewById(R.id.category_picture); 
     TextView filter_category = (TextView) convertView.findViewById(R.id.filter_category); 

     filter_category.setTypeface(DroidSans); 
     filter_category.setText(mFilters.get(position)); 
     filter_img.setBackgroundResource(mPictures.get(position)); 


     return convertView; 
    } 

    private void savePreferences(String key, boolean value) { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean(key, value); 
     editor.apply(); 
    } 

    private void loadSavedPreferences() { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); 
     boolean checkBoxValue = sharedPreferences.getBoolean("CheckBox_Value", checkBox.isChecked()); 
     if (checkBoxValue) { 
      checkBox.setChecked(true); 
     } else { 
      checkBox.setChecked(false); 
     } 
    } 
} 
+1

http://stackoverflow.com/questions/12621804/saving-state-of-the-checkbox-in-a-custom-list -view-with-checkbox видят это – MOSO

+1

, если предположить, что этот coz ur все еще использует старый медленный путь. используйте шаблон зрителя. также ur, если (ischecked) не имеет смысла – MOSO

+3

в вашем адаптере отсутствует, и если у вас больше, чем флажков, то почему вы взяли sharedPrefarance, он переопределит все значение флажка с последним предоставленным им. потому что вы взяли здесь один ключ. –

ответ

0

попробовать Использование

editor.commit(); 

вместо

editor.apply(); 

и один месяц повторно вещи, которые вы можете передать прямое логическое значение из onCheckedChanged метода, как следующее:

 @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {    
      savePreferences("CheckBox_Value", isChecked); 
     } 
Смежные вопросы