滚动时检查的listitem radiobutton重复

时间:2014-10-28 12:55:20

标签: null

nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull

3 个答案:

答案 0 :(得分:0)

您返回现有的convertView而不设置实际选择。 在onCheckedChanged方法中,您必须存储单选按钮的新选择状态,并在getView()方法中构建视图时使用它

private class MyAdapter extends ArrayAdapter<String> {
    private int[] selections;

    public MyAdapter(Context context, String[] strings) {
        super(context, -1, -1, strings);
        selections = new int[strings.length];
    } 

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ... 
        rbg.setOnCheckedChangeListener(new OnCheckedChangeListener() 
        {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                selections[position] = checkedId;
            }
        });
        ...
        rbg.check(selections[position]);
        return listLayout;
    }
}

答案 1 :(得分:0)

您没有使用视图持有者类......这就是您遇到此问题的原因...请按照以下教程进行操作:

   [http://java.dzone.com/articles/android-listview-optimizations]

答案 2 :(得分:0)

这没有意义:

convertView = listLayout;
convertView.setTag(listLayout);
...
listLayout = (LinearLayout) convertView.getTag();

convertView!=null时:您必须更新其中的数据。如果你按原样返回它&#39; :它将按原样显示&#39; (即与convertView的先前位置的数据具有相同的数据)

只是为了澄清convertView

的概念

如果convertView不为空:这是因为Android有机会重新使用listView中暂时使用但现在不在屏幕中的视图。因此,您不必从头开始重新创建视图,所有您需要做的就是根据convertView的新position更新数据


试试这个:

((TextView)convertView.findViewById(5001)).setText(super.getItem(position));