我有一个自定义行,它有 3 个单选按钮。
如果我检查一些单选按钮,然后滚动我的列表视图会丢失对单选按钮的引用,并且当我回来时,单选按钮不会被选中。或者当我滚动最后一个单选按钮时(但我没有点击这一行的单选按钮)
这是代码
适配器
public View getView(int position, View row, ViewGroup parent) {
Holder holder;
if (row == null) {
holder = new Holder();
row = LayoutInflater.from(activity).inflate(R.layout.linha_ficha,parent,false);
holder.tv_linhaFicha_NumItem = (TextView) row.findViewById(R.id.tv_linhaFicha_NumItem);
holder.tv_linhaFicha_Pergunta = (TextView) row.findViewById(R.id.tv_linhaFicha_Pergunta);
holder.tv_linhaFicha_Tolerancia = (TextView) row.findViewById(R.id.tv_linhaFicha_Tolerancia);
holder.tv_linhaFicha_DataAprovado = (TextView) row.findViewById(R.id.tv_linhaFicha_DataAprovado);
holder.tv_linhaFicha_DataReprovado = (TextView) row.findViewById(R.id.tv_linhaFicha_DataReprovado);
holder.tv_linhaFicha_Responsavel = (TextView) row.findViewById(R.id.tv_linhaFicha_Responsavel);
holder.rb_linhaFicha_O = (RadioButton) row.findViewById(R.id.rb_linhaFicha_O);
holder.rb_linhaFicha_O.setOnClickListener(this);
holder.rb_linhaFicha_O.setOnCheckedChangeListener(this);
holder.rb_linhaFicha_X = (RadioButton) row.findViewById(R.id.rb_linhaFicha_X);
holder.rb_linhaFicha_X.setOnCheckedChangeListener(this);
holder.rb_linhaFicha_Reinspecao = (RadioButton) row.findViewById(R.id.rb_linhaFicha_Reinspecao);
holder.rb_linhaFicha_Reinspecao.setOnClickListener(this);
holder.rb_linhaFicha_Reinspecao.setOnCheckedChangeListener(this);
row.setTag(holder);
} else {
holder = (Holder) row.getTag();
}
itensCondicoes = (Fvs_ItemCondicao) getItem(position);
holder.tv_linhaFicha_NumItem.setText(itensCondicoes.getNumItem());
holder.tv_linhaFicha_Pergunta.setText(itensCondicoes.getNome());
holder.tv_linhaFicha_Tolerancia.setText(itensCondicoes.getTolerancia());
holder.tv_linhaFicha_DataAprovado.setText(itensCondicoes.getDataAprovado());
holder.tv_linhaFicha_DataReprovado.setText(itensCondicoes.getDataReprovado());
holder.tv_linhaFicha_Responsavel.setText(itensCondicoes.getNomeUsuario());
if (itensCondicoes.getResposta().length() > 0) {
if (itensCondicoes.getResposta().equals("o")) {
holder.rb_linhaFicha_X.setButtonDrawable(R.drawable.bt_x);
holder.rb_linhaFicha_O.setButtonDrawable(R.drawable.bt_o_atv);
holder.rb_linhaFicha_Reinspecao.setButtonDrawable(R.drawable.bt_reinspecao_inativo);
setEnabledCheck(holder,false,true,false);
}
if (itensCondicoes.getResposta().equals("x")) {
holder.rb_linhaFicha_X.setButtonDrawable(R.drawable.bt_x_atv);
holder.rb_linhaFicha_O.setButtonDrawable(R.drawable.bt_o);
holder.rb_linhaFicha_Reinspecao.setButtonDrawable(R.drawable.bt_reinspecao_inativo);
setEnabledCheck(holder,false,false,false);
}
if (itensCondicoes.getResposta().equals("ox")) {
holder.rb_linhaFicha_X.setButtonDrawable(R.drawable.bt_x);
holder.rb_linhaFicha_O.setButtonDrawable(R.drawable.bt_o);
holder.rb_linhaFicha_Reinspecao.setButtonDrawable(R.drawable.bt_reinspecao_ativo);
setEnabledCheck(holder,false,false,true);
}
} else {
setEnabledCheck(holder, true, true, false);
}
holder.itensCondicoes = itensCondicoes;
return row;
}
OnCheckedChanged
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Holder tempHolder = ((Holder)((View)buttonView.getParent().getParent()).getTag());
if (tempHolder != null) {
if (buttonView.getId() == R.id.rb_linhaFicha_X) {
if (tempHolder.getItensCondicoes().getStatus() == 1) {
if (isChecked) {
tempHolder.rb_linhaFicha_X.setButtonDrawable(R.drawable.bt_x_atv);
setConformidadeRegras(tempHolder);
} else {
tempHolder.rb_linhaFicha_X.setButtonDrawable(R.drawable.bt_x);
}
}
}
if (buttonView.getId() == R.id.rb_linhaFicha_O) {
if (tempHolder.getItensCondicoes().getStatus() == 1) {
if (isChecked) {
tempHolder.rb_linhaFicha_O.setButtonDrawable(R.drawable.bt_o_atv);
setNaoConformidadeRegras(tempHolder);
} else {
tempHolder.rb_linhaFicha_O.setButtonDrawable(R.drawable.bt_o);
}
}
}
}
}
这是自定义行