Кажется, что я делаю что-то неправильно, так как всякий раз, когда я открываю фрагмент, все флажки отмечены.Сохранение состояния флажка в 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);
}
}
}
http://stackoverflow.com/questions/12621804/saving-state-of-the-checkbox-in-a-custom-list -view-with-checkbox видят это – MOSO
, если предположить, что этот coz ur все еще использует старый медленный путь. используйте шаблон зрителя. также ur, если (ischecked) не имеет смысла – MOSO
в вашем адаптере отсутствует, и если у вас больше, чем флажков, то почему вы взяли sharedPrefarance, он переопределит все значение флажка с последним предоставленным им. потому что вы взяли здесь один ключ. –