Я использую пользовательский адаптер для просмотра списка в андроид студии.В каждой строке есть флажок и текстовое представление.Я могу получить отмеченные элементы из этого адаптера массива, но не могу изменить состояние флажка из кода.Мне нужно снять флажки.Вот код адаптера пользовательского массива:
Я могу получить массив mCheckStates и изменить его значение, но это не влияет на состояние флажка в представлении конструктора.
public class CustomAdapter extends ArrayAdapter<LstItem> implements CompoundButton.OnCheckedChangeListener
{ public SparseBooleanArray mCheckStates;
Context context;
int layoutResourceId;
List<LstItem> data = null;
public CustomAdapter(Context context, int layoutResourceId, List<LstItem> data){
super(context, layoutResourceId,data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
mCheckStates = new SparseBooleanArray(data.size());
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
ItemHolder holder= null;
if (row == null){
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ItemHolder();
holder.txtVisValue = (TextView) row.findViewById(R.id.TxtVisValue);
holder.txtInvisValue = (TextView) row.findViewById(R.id.TxtInvisValue);
holder.chkSelect = (CheckBox) row.findViewById(R.id.Chk);
Log.d("test", "rownull:"+holder.txtVisValue.getText());
row.setTag(holder);
}
else
{
holder = (ItemHolder)row.getTag();
Log.d("test", "rownotnull:"+ holder.txtVisValue.getText());
}
LstItem item = data.get(position);
holder.txtVisValue.setText(item.visValue);
holder.txtInvisValue.setText(item.invisibleValue);
// holder.chkSelect.setChecked(true);
holder.chkSelect.setTag(position);
holder.chkSelect.setChecked(mCheckStates.get(position, false));
holder.chkSelect.setOnCheckedChangeListener(this);
return row;
}
public boolean isChecked(int position) {
return mCheckStates.get(position, false);
}
public void setChecked(int position, boolean isChecked) {
mCheckStates.put(position, isChecked);
}
public void setCheckedchk(int position, boolean isChecked) {
mCheckStates.put(position, isChecked);
}
public void toggle(int position) {
setChecked(position, !isChecked(position));
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mCheckStates.put((Integer) buttonView.getTag(), isChecked);
Log.d("test", "chechchange:"+ String.valueOf(buttonView.isChecked()));
}
static class ItemHolder
{
TextView txtVisValue;
TextView txtInvisValue;
CheckBox chkSelect;
}