如何选择列表视图多个单选按钮,并在安排使用ArrayList中的立场 [英] how to Select multiple radiobuttons in listview and arranging in arraylist using their positions

查看:120
本文介绍了如何选择列表视图多个单选按钮,并在安排使用ArrayList中的立场的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

荫具有与每个有4个选项(不过4单选按钮)25个问题得到选择的位置和他们的无线电台ID准确,但IAM无法跟上他们的立场与arraylist.And无线电台ID选择在listview.Iam四中多一个问题是,当列表视图滚动,检查单选按钮misplaced.Please下面帮我。

先谢谢了!

下面是我的适配器类,请调查一下。

公共类CustomListAdapter延伸BaseAdapter {

 私人整数[]的ListData;
    INT selectedPosition = -1;
    私人LayoutInflater mInflater;    公共CustomListAdapter(上下文的背景下,整数[]的ListData){
        超();
        this.listData =的ListData;
        mInflater = LayoutInflater.from(上下文);
        validdata =新的ArrayList<串GT;();
        INT大小= values​​.length;
        Log.d(大小,+大小);
        的for(int i = 0; I<大小;我++){
            checked.add(假);
            validdata.add();
            checkeddata.add();        }
    }    @覆盖
    公众诠释的getCount(){
        返回listData.length;
    }    @覆盖
    公共对象的getItem(INT位置){
        返回的位置;
    }    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }    公共查看getView(最终诠释的立场,观点convertView,
            父母的ViewGroup){
        最后ViewHolder持有人;
        查看查看= convertView;        如果(查看== NULL){
            鉴于= mInflater.inflate(R.layout.items,NULL);
            持有人=新ViewHolder();
            holder.headlineView =(TextView的)查看
                    .findViewById(R.id.textview1);
            holder.r1 =(单选)view.findViewById(R.id.radio0);
            holder.r2 =(单选)view.findViewById(R.id.radio1);
            holder.r3 =(单选)view.findViewById(R.id.radio2);
            holder.r4 =(单选)view.findViewById(R.id.radio3);
            holder.rp =(RadioGroup中)view.findViewById(R.id.rgOpinion);
            holder.rp.setTag(位置);
            view.setTag(保持器);            holder.rp
                    .setOnCheckedChangeListener(新OnCheckedChangeListener(){                        公共无效onCheckedChanged(RadioGroup中组,
                                INT checkedId){
                            // TODO自动生成方法存根
                            查看单选按钮组=
                                    .findViewById(checkedId);
                            最后弦乐radioId =将String.valueOf(组
                                    .indexOfChild(单选));
                            最终诠释无线电=组
                                    .indexOfChild(单选)
                            串radioid;                            Log.d(radioid,+ radioId);
                            如果(holder.r1.isChecked()){
                                holder.r1
                                        .setChecked(位置== selectedPosition);
                                holder.r1.setTag(位置);
                                holder.r1.setChecked(真);
                                holder.r1
                                        .setOnClickListener(新View.OnClickListener(){
                                            @覆盖
                                            公共无效的onClick(查看视图){
                                                selectedPosition =(整数)查看
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d(selectesxsxad,
                                                        + selectedPosition);
                                                字符串s =的ListData [selectedPosition]
                                                        的ToString();
                                                checked.add(
                                                        selectedPosition,
                                                        真正);                                                Log.d(有效,+查);                                            }
                                        });
                                radioid =A;                            }否则如果(holder.r2.isChecked()){
                                holder.r2
                                        .setChecked(位置== selectedPosition);
                                holder.r2.setTag(位置);
                                holder.r2.setChecked(真);
                                holder.r2
                                        .setOnClickListener(新View.OnClickListener(){
                                            @覆盖
                                            公共无效的onClick(查看视图){
                                                selectedPosition =(整数)查看
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d(selectesxsxad,
                                                        + selectedPosition);
                                                validdata.add(
                                                        selectedPosition,
                                                        radioId);
                                                Log.d(有效,
                                                        + validdata);                                            }
                                        });
                                radioid =B;                            }否则如果(holder.r3.isChecked()){
                                holder.r3
                                        .setChecked(位置== selectedPosition);
                                holder.r3.setTag(位置);                                holder.r3.setChecked(真);
                                holder.r3
                                        .setOnClickListener(新View.OnClickListener(){
                                            @覆盖
                                            公共无效的onClick(查看视图){
                                                selectedPosition =(整数)查看
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d(selectesxsxad,
                                                        + selectedPosition);
                                                validdata.add(
                                                        selectedPosition,
                                                        radioId);
                                                Log.d(有效,
                                                        + validdata);                                            }
                                        });
                                radioid =C;                            }否则如果(holder.r4.isChecked()){
                                holder.r4
                                        .setChecked(位置== selectedPosition);
                                holder.r4.setTag(位置);
                                holder.r4.setChecked(真);
                                holder.r4
                                        .setOnClickListener(新View.OnClickListener(){
                                            @覆盖
                                            公共无效的onClick(查看视图){
                                                selectedPosition =(整数)查看
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d(selectesxsxad,
                                                        + selectedPosition);
                                                validdata.add(
                                                        selectedPosition,
                                                        radioId);
                                                Log.d(有效,
                                                        + validdata);                                            }
                                        });
                                radioid =D;                            }
                        }
                    });        }其他{
            支架=(ViewHolder)view.getTag();
        }
        holder.rp =(RadioGroup中)view.findViewById(R.id.rgOpinion);
        holder.r1 =(单选)view.findViewById(R.id.radio0);
        holder.r2 =(单选)view.findViewById(R.id.radio1);
        holder.r3 =(单选)view.findViewById(R.id.radio2);
        holder.r4 =(单选)view.findViewById(R.id.radio3);
        holder.headlineView.setText(的ListData [位置]的ToString());
        holder.r1.getTag(位置);
        如果(holder.r1.isChecked()){
            holder.r1.setChecked(真);
        }否则如果(holder.r2.isChecked()){
            holder.r2.setChecked(真);
        }否则如果(holder.r3.isChecked()){
            holder.r3.setChecked(真);
        }否则如果(holder.r4.isChecked()){
            holder.r4.setChecked(真);
        }
        返回视图。
    }    公共类ViewHolder {
        TextView的headlineView;
        RadioGroup中RP;
        单选按钮R1,R2,R3,R4;
    }


解决方案

试试这个code这是工作
1.I采取用绳子和整数的bean类字段我制作一个ArrayList的类型为豆
2.在OnCreate我创建对象并设置requid问题,并添加到列表
//这里是适配器code

  @覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
    ViewHolder mHolder;
    //如果(convertView == NULL){
    mHolder =新ViewHolder();
    convertView = LayoutInflater.from(mContext).inflate(R.layout.listitems,NULL);
    mHolder.mTextView =(TextView中)convertView.findViewById(R.id.textView1);
    mHolder.mGroup =(RadioGroup中)convertView.findViewById(R.id.radioGroup1);
    mHolder.mRedButton1 =(单选)convertView.findViewById(R.id.radio0);
    mHolder.mRedButton2 =(单选)convertView.findViewById(R.id.radio1);
    mHolder.mRedButton3 =(单选)convertView.findViewById(R.id.radio2);
    // convertView.setTag(mHolder);
    //}
    //其他{
    // mHolder =(ViewHolder)convertView.getTag();
    //}
    最后MyQuestion mMyQuestion = myQuestions.get(位置);
    mHolder.mTextView.setText(mMyQuestion.getmQuestion());    INT mQuestion_answed = mMyQuestion.getQuestion_answed();
    mHolder.mGroup.setOnCheckedChangeListener(NULL);    如果(mQuestion_answed!= 0){
        开关(mQuestion_answed){
        情况1:
            mHolder.mRedButton1.setChecked(真);
            打破;
        案例2:
            mHolder.mRedButton2.setChecked(真);
            打破;
        案例3:
            mHolder.mRedButton3.setChecked(真);
            打破;
        默认:
            打破;
        }
    }    //侦听radioGroup中
    mHolder.mGroup.setOnCheckedChangeListener(新OnCheckedChangeListener(){
        @覆盖
        公共无效onCheckedChanged(RadioGroup中组,诠释checkedId){
            开关(checkedId){
            案例R.id.radio0:
                mMyQuestion.setQuestion_answed(1);
                打破;
            案例R.id.radio1:
                mMyQuestion.setQuestion_answed(2);
                打破;
            案例R.id.radio2:
                mMyQuestion.setQuestion_answed(3);
                打破;
            默认:
                打破;
            }
        }
    });
    返回convertView;
}

// VIewHolder

 私有类ViewHolder {
    TextView的mTextView;
    RadioGroup中mgroup首项;
    单选mRedButton1,mRedButton2,mRedButton3;
}

// bean类

 公共类MyQuestion {
私人字符串mQuestion;
私人诠释question_answed;公共MyQuestion(){
    超();
}公共字符串getmQuestion(){
    返回mQuestion;
}公共无效setmQuestion(字符串mQuestion){
    this.mQuestion = mQuestion;
}公众诠释getQuestion_answed(){
    返回question_answed;
}公共无效setQuestion_answed(INT question_answed){
    this.question_answed = question_answed;
}

}

这是我使用ArrayList中

 私人的ArrayList< MyQuestion> mQuestionsList =新的ArrayList< MyQuestion>();

Iam having 25 questions with each having 4 options(nothing but 4 radio buttons) selecting on among the four in listview.Iam getting selected position and their radio id accurately but iam unable to keep their position with radio id in arraylist.And one more issue is when listview is scrolled ,the radio buttons checked are misplaced.Please the below and help me.

Thanks in Advance!

Here is my adapter class,please look into it.

public class CustomListAdapter extends BaseAdapter {

    private Integer[] listData;
    int selectedPosition = -1;
    private LayoutInflater mInflater;

    public CustomListAdapter(Context context, Integer[] listData) {
        super();
        this.listData = listData;
        mInflater = LayoutInflater.from(context);
        validdata = new ArrayList<String>();
        int size = values.length;
        Log.d("size", "" + size);
        for (int i = 0; i < size; i++) {
            checked.add(false);
            validdata.add("");
            checkeddata.add("");

        }
    }

    @Override
    public int getCount() {
        return listData.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View convertView,
            ViewGroup parent) {
        final ViewHolder holder;
        View view = convertView;

        if (view == null) {
            view = mInflater.inflate(R.layout.items, null);
            holder = new ViewHolder();
            holder.headlineView = (TextView) view
                    .findViewById(R.id.textview1);
            holder.r1 = (RadioButton) view.findViewById(R.id.radio0);
            holder.r2 = (RadioButton) view.findViewById(R.id.radio1);
            holder.r3 = (RadioButton) view.findViewById(R.id.radio2);
            holder.r4 = (RadioButton) view.findViewById(R.id.radio3);
            holder.rp = (RadioGroup) view.findViewById(R.id.rgOpinion);
            holder.rp.setTag(position);
            view.setTag(holder);

            holder.rp
                    .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                        public void onCheckedChanged(RadioGroup group,
                                int checkedId) {
                            // TODO Auto-generated method stub
                            View radioButton = group
                                    .findViewById(checkedId);
                            final String radioId = String.valueOf(group
                                    .indexOfChild(radioButton));
                            final int radio = group
                                    .indexOfChild(radioButton);
                            String radioid;

                            Log.d("radioid", "" + radioId);
                            if (holder.r1.isChecked()) {
                                holder.r1
                                        .setChecked(position == selectedPosition);
                                holder.r1.setTag(position);
                                holder.r1.setChecked(true);
                                holder.r1
                                        .setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {
                                                selectedPosition = (Integer) view
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d("selectesxsxad", ""
                                                        + selectedPosition);
                                                String s = listData[selectedPosition]
                                                        .toString();
                                                checked.add(
                                                        selectedPosition,
                                                        true);

                                                Log.d("valid", "" + checked);

                                            }
                                        });
                                radioid = "A";

                            } else if (holder.r2.isChecked()) {
                                holder.r2
                                        .setChecked(position == selectedPosition);
                                holder.r2.setTag(position);
                                holder.r2.setChecked(true);
                                holder.r2
                                        .setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {
                                                selectedPosition = (Integer) view
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d("selectesxsxad", ""
                                                        + selectedPosition);
                                                validdata.add(
                                                        selectedPosition,
                                                        radioId);
                                                Log.d("valid", ""
                                                        + validdata);

                                            }
                                        });
                                radioid = "B";

                            } else if (holder.r3.isChecked()) {
                                holder.r3
                                        .setChecked(position == selectedPosition);
                                holder.r3.setTag(position);

                                holder.r3.setChecked(true);
                                holder.r3
                                        .setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {
                                                selectedPosition = (Integer) view
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d("selectesxsxad", ""
                                                        + selectedPosition);
                                                validdata.add(
                                                        selectedPosition,
                                                        radioId);
                                                Log.d("valid", ""
                                                        + validdata);

                                            }
                                        });
                                radioid = "C";

                            } else if (holder.r4.isChecked()) {
                                holder.r4
                                        .setChecked(position == selectedPosition);
                                holder.r4.setTag(position);
                                holder.r4.setChecked(true);
                                holder.r4
                                        .setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {
                                                selectedPosition = (Integer) view
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d("selectesxsxad", ""
                                                        + selectedPosition);
                                                validdata.add(
                                                        selectedPosition,
                                                        radioId);
                                                Log.d("valid", ""
                                                        + validdata);

                                            }
                                        });
                                radioid = "D";

                            }
                        }
                    });

        } else {
            holder = (ViewHolder) view.getTag();
        }
        holder.rp = (RadioGroup) view.findViewById(R.id.rgOpinion);
        holder.r1 = (RadioButton) view.findViewById(R.id.radio0);
        holder.r2 = (RadioButton) view.findViewById(R.id.radio1);
        holder.r3 = (RadioButton) view.findViewById(R.id.radio2);
        holder.r4 = (RadioButton) view.findViewById(R.id.radio3);
        holder.headlineView.setText(listData[position].toString());
        holder.r1.getTag(position);
        if (holder.r1.isChecked()) {
            holder.r1.setChecked(true);
        } else if (holder.r2.isChecked()) {
            holder.r2.setChecked(true);
        } else if (holder.r3.isChecked()) {
            holder.r3.setChecked(true);
        } else if (holder.r4.isChecked()) {
            holder.r4.setChecked(true);
        }
        return view;
    }

    public class ViewHolder {
        TextView headlineView;
        RadioGroup rp;
        RadioButton r1, r2, r3, r4;
    }

解决方案

try this code it is working 1.i have taken one bean class with string and integer as fields i am creating one arraylist with type as bean 2. in the onCreate i am creating objects and setting the requid question and ADD to list // here is adapter code

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder mHolder;
    // if (convertView == null) {
    mHolder = new ViewHolder();
    convertView = LayoutInflater.from(mContext).inflate(R.layout.listitems, null);
    mHolder.mTextView = (TextView) convertView.findViewById(R.id.textView1);
    mHolder.mGroup = (RadioGroup) convertView.findViewById(R.id.radioGroup1);
    mHolder.mRedButton1 = (RadioButton) convertView.findViewById(R.id.radio0);
    mHolder.mRedButton2 = (RadioButton) convertView.findViewById(R.id.radio1);
    mHolder.mRedButton3 = (RadioButton) convertView.findViewById(R.id.radio2);
    // convertView.setTag(mHolder);
    // }
    // else {
    // mHolder = (ViewHolder) convertView.getTag();
    // }
    final MyQuestion mMyQuestion = myQuestions.get(position);
    mHolder.mTextView.setText(mMyQuestion.getmQuestion());

    int mQuestion_answed = mMyQuestion.getQuestion_answed();
    mHolder.mGroup.setOnCheckedChangeListener(null);

    if (mQuestion_answed != 0) {
        switch (mQuestion_answed) {
        case 1:
            mHolder.mRedButton1.setChecked(true);
            break;
        case 2:
            mHolder.mRedButton2.setChecked(true);
            break;
        case 3:
            mHolder.mRedButton3.setChecked(true);
            break;
        default:
            break;
        }
    }

    // listener for radioGroup
    mHolder.mGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
            case R.id.radio0:
                mMyQuestion.setQuestion_answed(1);
                break;
            case R.id.radio1:
                mMyQuestion.setQuestion_answed(2);
                break;
            case R.id.radio2:
                mMyQuestion.setQuestion_answed(3);
                break;
            default:
                break;
            }
        }
    });
    return convertView;
}

// VIewHolder

private class ViewHolder {
    TextView mTextView;
    RadioGroup mGroup;
    RadioButton mRedButton1, mRedButton2, mRedButton3;
}

// bean class

public class MyQuestion {
private String mQuestion;
private int question_answed;

public MyQuestion() {
    super();
}

public String getmQuestion() {
    return mQuestion;
}

public void setmQuestion(String mQuestion) {
    this.mQuestion = mQuestion;
}

public int getQuestion_answed() {
    return question_answed;
}

public void setQuestion_answed(int question_answed) {
    this.question_answed = question_answed;
}

}

this is the ArrayList i am using

private ArrayList<MyQuestion> mQuestionsList = new ArrayList<MyQuestion>();

这篇关于如何选择列表视图多个单选按钮,并在安排使用ArrayList中的立场的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆