Радиогруппа в списке в Android

У меня есть список с динамическими переключателями (он будет создаваться на основе размера некоторых вопросов в списке, т.е. для первого вопроса у меня есть 4 переключателя, второй вопрос может иметь 3 переключателя.....). Моя проблема в том, что пользователь выберите выберите ответы с помощью переключателей Мне нужно отправить эту форму. Итак, как я могу получить эти данные списка вместе с выбранными ответами. Также мне нужно проверить ответ на вопрос или нет (имеется в виду проверка радиогруппы). Когда я отправляю, мне нужны все данные. Может ли кто-нибудь помочь мне в этом.

это мой вид

 public View getView(final int position, View convertView, ViewGroup parent) {
    View view = convertView;
    final ViewHolder viewHolder = new ViewHolder();
    view = View.inflate(mContext, R.layout.item_list_bradenscale_entry, null);

    viewHolder.txtQuestionHeadName = (TextView) view.findViewById(R.id.textview_question_name);
    viewHolder.radioGroup = (RadioGroup) view.findViewById(R.id.radio_group);
    viewHolder.radioButtonOption1 = (RadioButton) view.findViewById(R.id.radio1);
    viewHolder.radioButtonOption2 = (RadioButton) view.findViewById(R.id.radio2);
    viewHolder.radioButtonOption3 = (RadioButton) view.findViewById(R.id.radio3);
    viewHolder.radioButtonOption4 = (RadioButton) view.findViewById(R.id.radio4);
    viewHolder.txtQuestionHeadHint = (TextView) view.findViewById(R.id.textview_question_hint);
    viewHolder.txtOption1Hint = (TextView) view.findViewById(R.id.textview_option1Hint);
    viewHolder.txtOption2Hint = (TextView) view.findViewById(R.id.textview_option2Hint);
    viewHolder.txtOption3Hint = (TextView) view.findViewById(R.id.textview_option3Hint);
    viewHolder.txtOption4Hint = (TextView) view.findViewById(R.id.textview_option4Hint);
    view.setTag(viewHolder);
    selectedList = new 
    final DataContractQuestionList myDataitem = arrData.get(position);
    viewHolder.txtQuestionHeadName.setText(myDataitem.QuestionTitle);
    viewHolder.txtQuestionHeadHint.setText(myDataitem.QuestionHint);


    viewHolder.radioButtonOption1.setText(myDataitem.QuestionOptions.get(0).OptionTitle);
    viewHolder.radioButtonOption2.setText(myDataitem.QuestionOptions.get(1).OptionTitle);
    viewHolder.radioButtonOption3.setText(myDataitem.QuestionOptions.get(2).OptionTitle);
    viewHolder.txtOption1Hint.setText(myDataitem.QuestionOptions.get(0).OptionHint);
    viewHolder.txtOption2Hint.setText(myDataitem.QuestionOptions.get(1).OptionHint);
    viewHolder.txtOption3Hint.setText(myDataitem.QuestionOptions.get(2).OptionHint);
    if (myDataitem.QuestionOptions.size() < 4) {
        viewHolder.radioButtonOption4.setVisibility(View.INVISIBLE);
        viewHolder.txtOption4Hint.setVisibility(View.INVISIBLE);
    } else {
        viewHolder.radioButtonOption4.setText(myDataitem.QuestionOptions.get(3).OptionTitle);
        viewHolder.txtOption4Hint.setText(myDataitem.QuestionOptions.get(3).OptionHint);
        viewHolder.radioButtonOption4.setChecked(myDataitem.QuestionOptions.get(3).checkedStatus);

    }


    viewHolder.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            int selectedRadioButton = group.getCheckedRadioButtonId();
            View radioButton = group.findViewById(selectedRadioButton);
            int radioId = group.indexOfChild(radioButton);

            if (radioId / 2 == 0) {
                viewHolder.radioButtonOption1.setChecked(true);
                myDataitem.QuestionOptions.get(0).checkedStatus = true;
                myDataitem.QuestionOptions.get(1).checkedStatus = false;
                myDataitem.QuestionOptions.get(2).checkedStatus = false;
                if (myDataitem.QuestionOptions.size() == 4) {

                    myDataitem.QuestionOptions.get(3).checkedStatus = false;
                }
            } else if (radioId / 2 == 1) {
                viewHolder.radioButtonOption2.setChecked(true);
                myDataitem.QuestionOptions.get(0).checkedStatus = false;
                myDataitem.QuestionOptions.get(1).checkedStatus = true;
                myDataitem.QuestionOptions.get(2).checkedStatus = false;
                if (myDataitem.QuestionOptions.size() == 4) {

                    myDataitem.QuestionOptions.get(3).checkedStatus = false;
                }
            } else if (radioId / 2 == 2) {
                viewHolder.radioButtonOption3.setChecked(true);
                myDataitem.QuestionOptions.get(0).checkedStatus = false;
                myDataitem.QuestionOptions.get(1).checkedStatus = false;
                myDataitem.QuestionOptions.get(2).checkedStatus = true;
                if (myDataitem.QuestionOptions.size() == 4) {

                    myDataitem.QuestionOptions.get(3).checkedStatus = false;
                }
            } else if (radioId / 2 == 3) {
                if (myDataitem.QuestionOptions.size() == 4) {
                    viewHolder.radioButtonOption4.setChecked(true);
                    myDataitem.QuestionOptions.get(0).checkedStatus = false;
                    myDataitem.QuestionOptions.get(1).checkedStatus = false;
                    myDataitem.QuestionOptions.get(2).checkedStatus = false;
                    myDataitem.QuestionOptions.get(3).checkedStatus = true;

                }
            }

        }
    });


    viewHolder.radioButtonOption1.setChecked(myDataitem.QuestionOptions.get(0).checkedStatus);
    viewHolder.radioButtonOption2.setChecked(myDataitem.QuestionOptions.get(1).checkedStatus);
    viewHolder.radioButtonOption3.setChecked(myDataitem.QuestionOptions.get(2).checkedStatus);
    return view;
}

person Sri    schedule 19.04.2017    source источник
comment
Используйте тот же массив для хранения выбранного статуса. Затем на основе статуса вы можете получить проверенные данные и отправить.   -  person Mukeshkumar S    schedule 19.04.2017
comment
Опубликовал мой getview()   -  person Sri    schedule 19.04.2017


Ответы (1)


В методе getView() вашего адаптера прикрепите прослушиватель к переключателю во время рендеринга элемента списка. В событии on checked измените атрибут вашего объекта. Ваша активность может просто получить доступ к тому же списку объектов и получить последнее состояние анкеты.

rGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
    public void onCheckedChanged(RadioGroup group, int checkedId)
    {
        // This will get the radiobutton that has changed in its check state
        RadioButton checkedRadioButton = (RadioButton)group.findViewById(checkedId);
        // This puts the value (true/false) into the variable
        boolean isChecked = checkedRadioButton.isChecked();
        // If the radiobutton that has changed in check state is now checked...
        if (isChecked)
        {
            //Change your object's attribute here
            question.answer = "xxxx";
        }
    }
});
person Fernando Tan    schedule 19.04.2017
comment
Если на вопрос нет ответа, как будет вызываться rGroup.setOnCheckedChangeListener()? - person Sri; 19.04.2017
comment
если на него нет ответа, просто оставайтесь в состоянии вопроса по умолчанию, например. ответ = ложь. Разве это не работает? - person Fernando Tan; 19.04.2017