首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有单选按钮组滚动问题的自定义列表视图

带有单选按钮组滚动问题的自定义列表视图
EN

Stack Overflow用户
提问于 2016-01-06 17:25:36
回答 2查看 420关注 0票数 1

我正在尝试实现一个包含单选按钮的自定义列表视图,但是当我滚动列表视图时,选中的单选按钮会自动取消选择。我解决了这个问题,但我无法弄清楚确切的问题。我是新来的。我的适配器类代码是

代码语言:javascript
复制
 public class CustomAdapterListView extends ArrayAdapter<FDetailsPOJO> {

    private final List<FDetailsPOJO> list;
    private final Activity context;
    int resource;
    ViewHolder viewHolder = null;
    private LayoutInflater mLayoutInflater;

    public CustomAdapterListView(Activity context, int resource, List<FDetailsPOJO> objects) {
        super(context, resource, objects);
        this.context = context;
        this.resource = resource;
        this.list = objects;
        mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            try {

                convertView = mLayoutInflater.inflate(R.layout.custom_checkbox_row, parent, false);

                viewHolder = new ViewHolder();

                viewHolder.tvName = (TextView) convertView.findViewById(R.id.custom_checkbox_row_tv);
                viewHolder.radioGroup = (RadioGroup) convertView.findViewById(R.id.fragmenttab2_options);

                viewHolder.rbYes = (RadioButton) convertView.findViewById(R.id.fragmenttab2_options_yes);
                viewHolder.rbNo = (RadioButton) convertView.findViewById(R.id.fragmenttab2_options_no);

                viewHolder.radioGroup.setTag(position);
                convertView.setTag(R.id.custom_checkbox_row_tv, viewHolder.tvName);
                convertView.setTag(R.id.fragmenttab2_options, viewHolder.radioGroup);
                convertView.setTag(viewHolder);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                int isChecked = (int) group.getTag();
                try {

                    switch (checkedId) {
                        case R.id.fragmenttab2_options_yes:
                            try {
                                list.get(isChecked).setCheckedYes(true);
                                list.get(isChecked).setCheckedNo(false);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            break;
                        case R.id.fragmenttab2_options_no:
                            try {
                                list.get(isChecked).setCheckedNo(true);
                                list.get(isChecked).setCheckedYes(false);

                            } catch (Exception e) {
                                e.printStackTrace();
                            }

                            break;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        });
        try {
            viewHolder.radioGroup.setTag(position);
            viewHolder.tvName.setText(list.get(position).getFitnessItem());
            viewHolder.rbYes.setChecked(list.get(position).isCheckedYes());
            viewHolder.rbNo.setChecked(list.get(position).isCheckedNo());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return convertView;
    }

    private class ViewHolder {
        TextView tvName;
        RadioGroup radioGroup;
        RadioButton rbYes;
        RadioButton rbNo;
    }
}

在搜索解决方案时,我发现了一个解决问题的代码片段,但这不是同一链接中提到的适当方式

代码语言:javascript
复制
 @Override
public int getViewTypeCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public int getItemViewType(int position) {
    // TODO Auto-generated method stub
    return position;
}
EN

回答 2

Stack Overflow用户

发布于 2016-01-06 17:44:05

您必须在单独的变量中跟踪选定的单选选项,并根据列表的getView方法中的值手动将其标记为选中。

票数 1
EN

Stack Overflow用户

发布于 2016-01-06 17:43:29

您应该使用List或Map来记录适配器中每个单选按钮的状态。当调用onCheckedChanged方法时,将当前单选按钮的状态保存到List或Map中,并根据getView方法中的List或Map设置每个单选按钮的选中状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34629544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档