Radio Group in custom list view adapter in scrolling value going unchecked

635 views Asked by At

this my custom list view class whem i am scroling down our list view it's going unchecked privies select radio button

private String[] question_name;
private String[] op11, op22, op33, op44;
private Activity context;
RadioGroup rg=null;
private HashMap<Integer,String>selectitem=new HashMap<>();

public QustionAdapter(Activity context, String[] queation, String[] op1, String[] op2,
                      String[] op3, String[] op4) {
    super(context, R.layout.qustion_custom_list, queation);
    this.context = context;
    this.question_name = queation;
    this.op11 = op1;
    this.op22 = op2;
    this.op33 = op3;
    this.op44 = op4;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
    LayoutInflater inflater = context.getLayoutInflater();

    View listViewItem = inflater.inflate(R.layout.qustion_custom_list, null, false);

    TextView questionname=(TextView)listViewItem.findViewById(R.id.qustion_tb);
    RadioButton op1=(RadioButton)listViewItem.findViewById(R.id.op1);
    RadioButton op2=(RadioButton)listViewItem.findViewById(R.id.op2);
    RadioButton op3=(RadioButton)listViewItem.findViewById(R.id.op3);
    RadioButton op4=(RadioButton)listViewItem.findViewById(R.id.op4);
   rg=(RadioGroup) listViewItem.findViewById(R.id.radio_group);


  //  Toast.makeText(context,"Done :"+rg.getCheckedRadioButtonId(),Toast.LENGTH_LONG).show();
    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            Model model=new Model();

            RadioButton rb=(RadioButton) group.findViewById(checkedId);
           // Toast.makeText(context,"Done :"+rb.getText(),Toast.LENGTH_LONG).show();
            String sel=rb.getText().toString();
            selectitem.put(position,sel);
            model.setSelectResult(selectitem);
        }
    });


    questionname.setText(question_name[position]);
    op1.setText(op11[position]);
    op2.setText(op22[position]);
    op3.setText(op33[position]);
    op4.setText(op44[position]);

    return listViewItem;
}'

when i select first radio group button its going select but when scroll it when i come back in radio group its goning unchecked.

2

There are 2 answers

0
Xäiñ Ul Abideen On BEST ANSWER

here we go

    public class CurrentAffairs extends AppCompatActivity {
    public static int correct, wrong, marks;
    DbH db;
    ArrayList<Question> mcqs;
    Cursor cur;
    ListView lv;
    CustomAdapter c;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.current_affairs);

        //casting
        lv = (ListView) findViewById(R.id.lv);
        mcqs = new ArrayList<>();


    enter code here
        try {
            db = new DbH(this);
        } catch (IOException e2) {

            e2.printStackTrace();
        }

        try {
            db.createdatabase();
        } catch (IOException e) {

            e.printStackTrace();
        }

        db.opendatabase();
        cur = db.data();

        try {

            while (cur.moveToNext()) {
                String mcqss = cur.getString(1);
                String opta = cur.getString(2);
                String optb = cur.getString(3);
                String optc = cur.getString(4);
                String optd = cur.getString(5);
                String answ = cur.getString(6);

                //put data in a listview
                Question question = new Question();
                question.question = mcqss;
                question.option1 = opta;
                question.option2 = optb;
                question.option3 = optc;
                question.option4 = optd;
                question.correctanxer = answ;
                mcqs.add(question);



               c = new CustomAdapter(CurrentAffairs.this, R.layout.row, R.id.mcqsText, mcqs);
                lv.setAdapter(c);


            }
        } finally {
            cur.close();
        }
        Button btnshow = (Button) findViewById(R.id.btnshowresult);
        btnshow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StringBuffer sb = new StringBuffer();
                sb.append("Correct Answer = " + " " + correct);
                sb.append("    " + "Wrong Answer = " + " " + wrong);
                sb.append("    " + "Final Score = " + " " + correct * 5);

                Toast.makeText(CurrentAffairs.this, sb, Toast.LENGTH_SHORT).show();
            }
        });
    }



    class CustomAdapter extends ArrayAdapter<Question> {

        public CustomAdapter(Context context, int resource, int textViewResourceId, ArrayList<Question> objects) {
            super(context, resource, textViewResourceId, objects);


        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v = inflater.inflate(R.layout.row, parent, false);
            TextView mcqsText = (TextView) v.findViewById(R.id.mcqsText);
            TextView ans2 = (TextView) v.findViewById(R.id.answer2);
            TextView anss = (TextView) v.findViewById(R.id.answer);
            RadioGroup rg = (RadioGroup) v.findViewById(R.id.radioGroup);

            RadioButton opt1 = (RadioButton) v.findViewById(R.id.optA);
            RadioButton opt2 = (RadioButton) v.findViewById(R.id.optB);
            RadioButton opt3 = (RadioButton) v.findViewById(R.id.optC);
            RadioButton opt4 = (RadioButton) v.findViewById(R.id.optD);

            Question question = mcqs.get(position);

            mcqsText.setText(question.question);
            opt1.setText(question.option1);
            opt2.setText(question.option2);
            opt3.setText(question.option3);
            opt4.setText(question.option4);
            anss.setText(question.selectedanxer);
            ans2.setText("Correct answer is = " + question.correctanxer);

            String test=opt1.getText().toString();
            String test2=question.selectedanxer+"";

            if (test.equals(""+test2)){
                opt1.setChecked(true);
            }
            if (test2.equals(opt2.getText()+"")){
                opt2.setChecked(true);
            }
            if (test2.equals(opt3.getText()+"")){
                opt3.setChecked(true);
            }
            if (test2.equals(opt4.getText()+"")){
                opt4.setChecked(true);
            }




            rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {


                    Question question1=mcqs.get(position);
                    RadioButton radioButton= (RadioButton) group.findViewById(checkedId);
                    mcqs.get(position).selectedanxer=radioButton.getText().toString();
                    notifyDataSetChanged();



                }
            });

            return v;
        }
    }

    public class Question {
        String question;
        String option1;
        String option2;
        String option3;
        String option4;

        String selectedanxer;
        String correctanxer;

    }

}
0
Mahendra Dabi On

You have to work with model class of all the object having boolean value for true false for check and uncheck and set the getter and setter method and access the value in get view() method is checked or unchecked and set the value for the view.

       @Override
       public void onBindViewHolder(final MyViewHolder holder, final inposition)             {     
        final int pos = position;
        holder.title.setText(list.get(pos).getName());
        if (islongpressed)
        {
            holder.checkBox.setVisibility(View.VISIBLE);
        }
        else holder.checkBox.setVisibility(View.GONE);

        holder.checkBox.setChecked(list.get(pos).isSelected());


try {
    holder.checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CheckBox cb = (CheckBox) v;

            AudioFile contact =list.get(pos);

            contact.setSelected(cb.isChecked());

            list.get(pos).setSelected(cb.isChecked());

        }
    });


}