1210817109 2015-04-10 06:57 采纳率: 0%
浏览 4651
已采纳

android listview里面Radiogroup监听事件混乱

public class AdapterTest extends ArrayAdapter {

    private int resourceId;
    List<Test> listTest = new ArrayList<Test>();
    private ViewHolder viewHolder;

    public AdapterTest(Context context, int resource, 

List objects) {
super(context, resource, objects);
resourceId = resource;
listTest = objects;
}

    @Override
    public View getView(final int position, View 

convertView,
ViewGroup parent) {

        viewHolder = new ViewHolder();
        View view = LayoutInflater.from(getContext

()).inflate(resourceId,
null);

        viewHolder.tvTitle = (TextView) view
                .findViewById

(R.id.tv_test_title);
viewHolder.rdoG = (RadioGroup)

view.findViewById(R.id.rdog_test);
viewHolder.radA = (RadioButton)

view.findViewById(R.id.rdo_test_a);
viewHolder.radB = (RadioButton)

view.findViewById(R.id.rdo_test_b);
viewHolder.radC = (RadioButton)

view.findViewById(R.id.rdo_test_c);
viewHolder.radD = (RadioButton)

view.findViewById(R.id.rdo_test_d);
viewHolder.tvAnswer = (TextView) view
.findViewById

(R.id.tv_test_answer);

        viewHolder.tvTitle.setText(String.valueOf

(position + 1) + "、"
+ listTest.get

(position).getTitle());
viewHolder.radA.setText("A、"
+ listTest.get

(position).getQuestionA());
viewHolder.radB.setText("B、"
+ listTest.get

(position).getQuestionB());
viewHolder.radC.setText("C、"
+ listTest.get

(position).getQuestionC());
viewHolder.radD.setText("D、"
+ listTest.get

(position).getQuestionD());
viewHolder.tvAnswer.setText("答案:"
+ listTest.get

(position).getAnswer());

        // viewHolder.rdoG.setTag(position);
        if (listTest.get(position).getChecked

().equals("A")
|| listTest.get

(position).getChecked().equals("B")
|| listTest.get

(position).getChecked().equals("C")
|| listTest.get

(position).getChecked().equals("D")) {

            if (listTest.get(position).getChecked

().equals("A")) {
viewHolder.radA.setChecked

(true);
if (listTest.get

(position).getAnswer()
.equals

(listTest.get(position).getChecked()))

viewHolder.tvAnswer.setTextColor(0xff008000);
else

viewHolder.tvAnswer.setTextColor(0xffdc143c);

viewHolder.tvAnswer.setVisibility(View.VISIBLE);
}
if (listTest.get(position).getChecked

().equals("B")) {
viewHolder.radB.setChecked

(true);
if (listTest.get

(position).getAnswer()
.equals

(listTest.get(position).getChecked()))

viewHolder.tvAnswer.setTextColor(0xff008000);
else

viewHolder.tvAnswer.setTextColor(0xffdc143c);

viewHolder.tvAnswer.setVisibility(View.VISIBLE);
}
if (listTest.get(position).getChecked

().equals("C")) {
viewHolder.radC.setChecked

(true);
if (listTest.get

(position).getAnswer()
.equals

(listTest.get(position).getChecked()))

viewHolder.tvAnswer.setTextColor(0xff008000);
else

viewHolder.tvAnswer.setTextColor(0xffdc143c);

viewHolder.tvAnswer.setVisibility(View.VISIBLE);
}
if (listTest.get(position).getChecked

().equals("D")) {
viewHolder.radD.setChecked

(true);
if (listTest.get

(position).getAnswer()
.equals

(listTest.get(position).getChecked()))

viewHolder.tvAnswer.setTextColor(0xff008000);
else

viewHolder.tvAnswer.setTextColor(0xffdc143c);

viewHolder.tvAnswer.setVisibility(View.VISIBLE);
}
viewHolder.radA.setEnabled(false);
viewHolder.radB.setEnabled(false);
viewHolder.radC.setEnabled(false);
viewHolder.radD.setEnabled(false);
} else {
viewHolder.rdoG.clearCheck();
viewHolder.tvAnswer.setVisibility

(View.GONE);
}
viewHolder.rdoG.setOnCheckedChangeListener(new

OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged

(RadioGroup arg0, int arg1) {
if(viewHolder.rdoG == arg0){
switch (arg1) {
case R.id.rdo_test_a:
listTest.get

(position).setChecked("A");

                        if 

(listTest.get(position).getAnswer()

.equals(listTest.get(position).getChecked()))

viewHolder.tvAnswer.setTextColor(0xff008000);
else

viewHolder.tvAnswer.setTextColor(0xffdc143c);

viewHolder.tvAnswer.setVisibility(View.VISIBLE);

viewHolder.radA.setEnabled(false);

viewHolder.radB.setEnabled(false);

viewHolder.radC.setEnabled(false);

viewHolder.radD.setEnabled(false);
break;

                    case R.id.rdo_test_b:
                        listTest.get

(position).setChecked("B");

                        if 

(listTest.get(position).getAnswer()

.equals(listTest.get(position).getChecked()))

viewHolder.tvAnswer.setTextColor(0xff008000);
else

viewHolder.tvAnswer.setTextColor(0xffdc143c);

viewHolder.tvAnswer.setVisibility(View.VISIBLE);

viewHolder.radA.setEnabled(false);

viewHolder.radB.setEnabled(false);

viewHolder.radC.setEnabled(false);

viewHolder.radD.setEnabled(false);
break;

                    case R.id.rdo_test_c:
                        listTest.get

(position).setChecked("C");

                        if 

(listTest.get(position).getAnswer()

.equals(listTest.get(position).getChecked()))

viewHolder.tvAnswer.setTextColor(0xff008000);
else

viewHolder.tvAnswer.setTextColor(0xffdc143c);

viewHolder.tvAnswer.setVisibility(View.VISIBLE);

viewHolder.radA.setEnabled(false);

viewHolder.radB.setEnabled(false);

viewHolder.radC.setEnabled(false);

viewHolder.radD.setEnabled(false);
break;

                    case R.id.rdo_test_d:
                        listTest.get

(position).setChecked("D");

                        if 

(listTest.get(position).getAnswer()

.equals(listTest.get(position).getChecked()))

viewHolder.tvAnswer.setTextColor(0xff008000);
else

viewHolder.tvAnswer.setTextColor(0xffdc143c);

viewHolder.tvAnswer.setVisibility(View.VISIBLE);

viewHolder.radA.setEnabled(false);

viewHolder.radB.setEnabled(false);

viewHolder.radC.setEnabled(false);

viewHolder.radD.setEnabled(false);
break;

                    default:
                        break;
                    }
                }

            }
        });

        return view;
    }

    class ViewHolder {
        TextView tvTitle;
        RadioGroup rdoG;
        RadioButton radA;
        RadioButton radB;
        RadioButton radC;
        RadioButton radD;
        TextView tvAnswer;

    }
}

}

  • 写回答

6条回答 默认 最新

  • 月盡天明 博客专家认证 2015-04-10 09:08
    关注

    你这问题就是viewholder 的复用问题。
    你需要为每个组件设置点击事件。在设置点击事件的时候需要注意:需要保存每一个viewholder。
    贴上一段代码:
    可以参考一下

     private class AttenOnclickListener implements View.OnClickListener {
            private int position;
            private ViewHolderHouse viewHoder;
    
            public AttenOnclickListener(int position, ViewHolderHouse viewHoder) {
                this.position = position;
                this.viewHoder = viewHoder;
            }
    
            @Override
            public void onClick(View v) {
                if (!checkIsLogin()) {
                    T.showShort(context, "请先登录!");
                } else {
                    startProgressDialog("");
                    if ("1".equals(list.get(position).getAttentFlag())) {// 取消关注
                        attentionOrNot(viewHoder, position, "0");
                    } else {// 关注
                        attentionOrNot(viewHoder, position, "1");
                    }
                }
            }
        }
    

    设置点击事件:

     hHolder.zanLl.setOnClickListener(new ZanOnclickListener(position, hHolder));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿