0

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);
                    }
                }
            }
        }
    }

そして、これがカスタム行です

ボタンが青色の場合、RadioButtons X、O、および OX は非アクティブです。

4

2 に答える 2

0

ビューは再利用されるため、チェック ボックスの状態を保存する必要があり、ラジオ ボックスによって保存された暗黙の状態に依存することはできません。

これを getItem によって返されるクラスに追加し、ラジオ ボタンをクリックすると、状態がそのクラスに保存されます。

于 2014-08-07T21:47:41.300 に答える