preethi
preethi

Reputation: 222

how to Select multiple radiobuttons in listview and arranging in arraylist using their positions

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

Upvotes: 4

Views: 1135

Answers (1)

KomalG
KomalG

Reputation: 778

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

Upvotes: 1

Related Questions