在SharedPreferences中保存复选框状态

时间:2014-11-17 11:10:26

标签: java android sharedpreferences

似乎我做错了,因为每当我打开片段时,都会检查所有复选框。

但是当我点击其中一个进行取消选中时,我再次调用savePreference方法,其中checkBox.isChecked为false。但是在方法内部,该值设置为true。因此,我认为这就是为什么每次运行应用程序时,都会检查复选框。

编辑:isChecked将始终返回true,即使我取消选中

这是我的代码:

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 个答案:

答案 0 :(得分:0)

尝试使用

    editor.commit();

而不是

    editor.apply();

还有一件事你可以从onCheckedChanged方法传递直接布尔值,如下所示:

     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {             
            savePreferences("CheckBox_Value", isChecked);
      }