У меня возникли проблемы с поиском наилучшего способа хранения и отображения флажков в списке.Установка флажка динамически из sqlite в фрагменте
Сейчас у меня есть код в методе GetView:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
//final ViewHolder holder;
if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(R.layout.grid_item, null);
}
ImageView img = (ImageView) convertView.findViewById(R.id.grid_item_img);
cb = (CheckBox) convertView.findViewById(R.id.chk_box_griditem);
if(photos.get(position).getIshidden()){
cb.setChecked(false);
}else{
cb.setChecked(true);
}
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
MySQLiteHelper db = MySQLiteHelper.getInstance(getActivity());
Log.d("checkbox", "status: " + photos.get(position).getIshidden());
if (isChecked) {
photos.get(position).setIshidden(true);
cb.setChecked(true);
Log.d("checkbox", "isChecked");
db.updatePhoto(photos.get(position));
} else {
photos.get(position).setIshidden(false);
cb.setChecked(false);
Log.d("checkbox", "isCheckedelse");
db.updatePhoto(photos.get(position));
}
}
});
imageLoader.displayImage(imgUrls[position], img, options, animateFirstListener);
//img.setImageResource(mImgRes);
return convertView;
}
ДБ помощник принимает объект фото в качестве аргумента и обновляет строку, если она существует. Поэтому прямо сейчас я обновляю текущий фотообъект isHidden()
как истинный или ложный, а затем передаю обновленный объект в db-помощник.
Физическая база данных, кажется, обновляется правильно. Однако возникает проблема при установке состояния флажков. По-видимому, флажки установлены случайным образом, как отмеченные или снятые флажками.
Также мне нравится делать это в getView, cpu жадный, но я не уверен, как еще это сделать.
Вы не должны устанавливать OnCheckedChangeListener каждый раз, когда вызывается getView. Для каждого флажка достаточно.-> Я вижу, вам нужен новый прослушиватель, потому что вы ссылаетесь на позицию в слушателе. – RaphMclee
К какому классу относится этот метод getView? К адаптеру? И было бы неплохо узнать, какова ваша цель. Что это за объект 'photos'? – RaphMclee
Его из пользовательского адаптера listview 'private class GridAdapter расширяет BaseAdapter' – Nick