0
조각을 열 때마다 모든 체크 박스가 선택되어 있기 때문에 내가 뭔가 잘못하고있는 것처럼 보입니다.SharedPreferences의 체크 박스 상태 저장
그러나 선택을 취소하기 위해 그 중 하나를 클릭하면 checkBox.isChecked가 false 인 savePreference 메소드가 다시 호출됩니다. 그러나 메서드 내부에서 값은 true로 설정됩니다. 따라서 나는 그것이 항상 앱을 실행할 때마다 체크 박스가 항상 선택되어 있다고 가정합니다.
편집 :의 IsChecked는 항상 내가 취소하는 경우에도, 내가 true를 돌려줍니다 여기
내 코드입니다 :editor.commit();
대신
editor.apply();
사용하려고
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-checkboxes는이 느슨한 방법을 사용하여이 coz ur을 제안하면이 – MOSO
을 참조하십시오. 뷰어 홀더 패턴을 사용한다. 또한 ur (ischecked) doesnt가 의미를 만들 때 – MOSO
어댑터에 일부가 누락되어 있습니다. 확인란 이상인 경우 왜 sharedPrefarance를 사용 했습니까? 마지막으로 제공된 모든 확인란 값을 무시합니다. 여기에 하나의 열쇠를 가져 왔기 때문에. –