0

When I scroll down in android ListView, RadioButton can't selected . i apply set selected true on set change check listener , not working , need help. thanks advance. I use a custom adapter that used 4 RadioButton and set mcq answer option . 50 mcq but when scrolling in ListView than not previous item selected . auto refresh . can any one suggest me what can i do.

public class ModeltestDetailsAdapter extends ArrayAdapter {

private final Context context;
private final List<AllData> values;
public static ArrayList<String> selectedAnswers;

public ModeltestDetailsAdapter(Context context, List<AllData> values) {

    super(context, R.layout.list_details_modeltest, values);
    this.context = context;
    this.values = values;

    selectedAnswers = new ArrayList<>();
    for (int i = 0; i < values.size(); i++) {
        selectedAnswers.add("Not Attempted");
    }

}

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

    // urveyDataHelper mDbHelper = new SurveyDataHelper(context);

    final ViewGroup p;
    p = parent;

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View rowView = inflater.inflate(R.layout.list_details_modeltest, parent, false);

    TextView questions = (TextView) rowView.findViewById(R.id.questions);
    TextView answer = (TextView) rowView.findViewById(R.id.ans);
    final RadioGroup radioGroup = (RadioGroup) rowView.findViewById(R.id.radiogroup);
    RadioButton radioButton;
    String result;
    final RadioButton optiona= (RadioButton) rowView.findViewById(R.id.optiona);
    final RadioButton   optionb= (RadioButton) rowView.findViewById(R.id.optionb);
    RadioButton optionc= (RadioButton) rowView.findViewById(R.id.optionc);
    RadioButton optiond= (RadioButton) rowView.findViewById(R.id.optiond);

    questions.setText(values.get(position).getQues());
    answer.setText(values.get(position).getAns());
    optiona.setText(values.get(position).getOpt_one());
    optionb.setText(values.get(position).getOpt_two());
    optionc.setText(values.get(position).getOpt_three());
    optiond.setText(values.get(position).getOpt_four());

    optionc.setChecked(true);



    optiona.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    // set Yes values in ArrayList if RadioButton is checked
            if (isChecked) {
                optiona.setChecked(true);

                //notifyDataSetChanged();
                Toast.makeText(
                        context,
                        "Answer is ." + buttonView.getText().toString(),
                        Toast.LENGTH_LONG).show();

                if (values.get(position).getAns().equals(buttonView.getText().toString())) {

                    selectedAnswers.set(position, "Correct");

                } else {
                    selectedAnswers.set(position, "Wrong");
                }

            }else {
                optiona.setChecked(false);
            }


        }
    });



    optionb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // set Yes values in ArrayList if RadioButton is checked
            if (isChecked) {

                optionb.setChecked(true);

                // notifyDataSetChanged();
                Toast.makeText(
                        context,
                        "Answer is ." + buttonView.getText().toString(),
                        Toast.LENGTH_LONG).show();

                if (values.get(position).getAns().equals(buttonView.getText().toString())) {

                    selectedAnswers.set(position, "Correct");

                } else {
                    selectedAnswers.set(position, "Wrong");
                }

            }
            else {
                optionb.setChecked(false);
            }
        }

    });



    questions.setTag(position);
    answer.setTag(position);
    optiona.setTag(position);
    optionb.setTag(position);
    optionc.setTag(position);
    optiond.setTag(position);
    //radioButton.setTag(position);
    optiona.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            final int pos = (Integer) v.getTag();

            optiona.setChecked(true);
            optiona.setSelected(true);

            ((ListView) p).performItemClick(v, pos, 0);
        }
    });


    answer.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            final int pos = (Integer) v.getTag();

            ((ListView) p).performItemClick(v, pos, 0);
        }
    });

    questions.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            final int pos = (Integer) v.getTag();

            ((ListView) p).performItemClick(v, pos, 0);
        }
    });

    return rowView;
}

}

Cœur
  • 37,241
  • 25
  • 195
  • 267
Techtunes Apps
  • 103
  • 1
  • 7

1 Answers1

0

In your AllData model, take another variable,

int selectedAnswer = -1; // -1 as default for not selected answer.

Now, In your Adapter class, in getView() method, do the following implementation.

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

    final ViewGroup p;
    p = parent;

    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View rowView = inflater.inflate(R.layout.list_details_modeltest, parent, false);

    TextView questions = (TextView) rowView.findViewById(R.id.questions);
    TextView answer = (TextView) rowView.findViewById(R.id.ans);
    final RadioGroup radioGroup = (RadioGroup) rowView.findViewById(R.id.radiogroup);
    RadioButton radioButton;
    String result;
    final RadioButton optiona= (RadioButton) rowView.findViewById(R.id.optiona);
    final RadioButton   optionb= (RadioButton) rowView.findViewById(R.id.optionb);
    RadioButton optionc= (RadioButton) rowView.findViewById(R.id.optionc);
    RadioButton optiond= (RadioButton) rowView.findViewById(R.id.optiond);

    questions.setText(values.get(position).getQues());
    answer.setText(values.get(position).getAns());
    optiona.setText(values.get(position).getOpt_one());
    optionb.setText(values.get(position).getOpt_two());
    optionc.setText(values.get(position).getOpt_three());
    optiond.setText(values.get(position).getOpt_four());

    if(values.get(position).getSelectedAnswer() == 1){
        optiona.setSelected(true);
    }
    else if(values.get(position).getSelectedAnswer() == 2){
        optionb.setSelected(true);
    }
    else if(values.get(position).getSelectedAnswer() == 3){
        optionc.setSelected(true);
    }
    else if(values.get(position).getSelectedAnswer() == 4){
        optiond.setSelected(true);
    }

    optiona.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        if (isChecked) {
            values.get(position).setSelectedAnswer(1);
            ....

        }else {
            optiona.setChecked(false);
            }


        }
    });

    ....

    return rowView;
}
Chintak Patel
  • 748
  • 6
  • 24
  • thanks for your answer, But not working , when i scroll down then not able to selected state. i add if(values.get(position).getSelectedAnswer() == 1){ optiona.setSelected(true); } else if(values.get(position).getSelectedAnswer() == 2){ optionb.setSelected(true); } else if(values.get(position).getSelectedAnswer() == 3){ optionc.setSelected(true); } else if(values.get(position).getSelectedAnswer() == 4){ optiond.setSelected(true); } but not working . – Techtunes Apps Mar 12 '18 at 09:49
  • but you are needed to add `if (isChecked) { values.get(position).setSelectedAnswer(1); }` in the `optiona.setOnCheckedChangeListener()` and other 3 radio buttons too. – Chintak Patel Mar 12 '18 at 12:30
  • this is my updated code but not working . anything wrong? i used this code for 4 radio button optiona.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { values.get(position).setSelectedAnswer(1); }else { optiona.setChecked(false); } } }); return rowView; } – Techtunes Apps Mar 12 '18 at 13:50
  • Thanks it's work. just change optiona.setChecked(true); insted of setSelected(true). – Techtunes Apps Mar 13 '18 at 07:54