我一直在开发一个简单的应用程序,它有一个功能,你可以通过回答多个选择题来测试你的知识。在选择了一个答案后(通过单选按钮),我希望在所选答案的右边显示一个复选标记(如果答案是正确的),或者显示一个"X“(如果答案不正确)。由于某些原因,我的代码在第一次尝试时工作得很好,然后在选择其他答案时不会改变任何内容。
下面是代码(适配器子视图的一部分)
 /**
 * Creates the View of group(parent) in the ExpandableListView
 *
 * @return the View of each parent in the List
 */
@Override
public View getGroupView(final int groupPosition, final boolean isExpanded, View convertView, final ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View parentView = inflater.inflate(R.layout.custom_list_parent, parent, false);
    Question myQuestion = myList.get(groupPosition);
    //setting the text of each parent
    TextView singleTitle = (TextView) parentView.findViewById(R.id.title);
    singleTitle.setText(myQuestion.getQuestion());
    //handling the indicator
    ImageView indicator = (ImageView) parentView.findViewById(R.id.indicator);
    //if the list is expanded use arrow up, if not then use arrow down
    int imageResourceId = isExpanded ? android.R.drawable.arrow_up_float : android.R.drawable.arrow_down_float;
    //initial arrow
    indicator.setImageResource(imageResourceId);
    indicator.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            /**
             * Will expand and collapse groups depending on previous state
             * @param v the View from which the ClickListener was triggered
             */
            if (isExpanded) ((ExpandableListView) parent).collapseGroup(groupPosition);
            else ((ExpandableListView) parent).expandGroup(groupPosition, true);
        }
    });
    return parentView;
}
/**
 * Creates the View of child in the ExpandableListView
 * @return the View of each child in the List
 */
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(context);
    final View childView = inflater.inflate(R.layout.custom_list_child_questions, parent, false);
    handleRadioButtons(childView,groupPosition);
    return childView;
}
/**
 * Checks if the child can be selected/pressed as well
 *
 * @return whether the child is selectable or not
 */
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return false;
}
public void handleRadioButtons(View childView, int groupPosition) {
    final Question myQuestion = myList.get(groupPosition);
    RadioGroup group = (RadioGroup) childView.findViewById(R.id.buttonGroup);
    initializeButtons(childView);
    setButtonText(myQuestion);
    //if one of the buttons is pressed
    group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        /**
         * Will expand and collapse groups depending on previous state
         * @param group the button group this ActionListener will operate on
         * @param checkedId the ID of the individual button that was pressed
         */
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            //get the index of the correct answer
            int indexAnswer = Integer.parseInt(myQuestion.getAnswer()) - 1;
            for (int i = 0; i < possibleAnswers.length; i++) {
                //if the button at position i was pressed
                if (checkedId == possibleAnswers[i].getId()) {
                    //if its the correct answer
                    if (i == indexAnswer)
                        possibleAnswers[i].setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.checkmark, 0);
                    else
                        possibleAnswers[i].setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.wrong, 0);
                } else {
                    possibleAnswers[i].setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
                }
            }
        }
    });
}
/**
 * Sets the text of each radio button as a possible answer
 * @param myQuestion the Question corresponding to the possible answers
 */
public void setButtonText(Question myQuestion) {
    for (int i = 0; i < possibleAnswers.length; i++) {
        possibleAnswers[i].setText(myQuestion.getPossibleAnswers()[i]);
    }
}
/**
 * Initializes the RadioButton array of possible answers
 * @param childView the View in which the radio buttons are defined
 */
public void initializeButtons(View childView) {
    //array of radioButtons, each button will correspond to a possible answer
    possibleAnswers[0] = (RadioButton) childView.findViewById(R.id.answer1);
    possibleAnswers[1] = (RadioButton) childView.findViewById(R.id.answer2);
    possibleAnswers[2] = (RadioButton) childView.findViewById(R.id.answer3);
    possibleAnswers[3] = (RadioButton) childView.findViewById(R.id.answer4);
}}
和xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:background="#6495ED"
              android:layout_width="match_parent"
              android:layout_height="135dp">
    <RadioGroup
            android:id="@+id/buttonGroup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <RadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="choice1"
                    android:drawablePadding="6dp"
                    android:textColor="#ffffff"
                    android:textSize="12dp"
                    android:id="@+id/answer1"/>
            <RadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="choice 2"
                    android:drawablePadding="6dp"
                    android:textColor="#ffffff"
                    android:textSize="12dp"
                    android:id="@+id/answer2"/>
            <RadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="choice 3"
                    android:drawablePadding="6dp"
                    android:textColor="#ffffff"
                    android:textSize="12dp"
                    android:id="@+id/answer3"/>
            <RadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="choice 4"
                    android:drawablePadding="6dp"
                    android:textColor="#ffffff"
                    android:textSize="12dp"
                    android:id="@+id/answer4"
            />
    </RadioGroup>屏幕上的问题就是这样的:问题
有什么想法吗?请帮帮我!
编辑:
下面是我现在所做的,试着利用能见度:
public void handleRadioButtons(final View childView, int groupPosition) {
    final Question myQuestion = myList.get(groupPosition);
    RadioGroup group = (RadioGroup) childView.findViewById(R.id.buttonGroup);
    initializeButtons(childView, myQuestion);
    setButtonText(myQuestion);
    //if one of the buttons is pressed
    group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        /**
         * Will expand and collapse groups depending on previous state
         *
         * @param group     the button group this ActionListener will operate on
         * @param checkedId the ID of the individual button that was pressed
         */
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            //get the index of the correct answer
            for (int i = 0; i < possibleAnswers.length; i++) {
                //if the button at position i was pressed
                if (checkedId == possibleAnswers[i].getId()) {
                    possibleAnswers[i].getCompoundDrawables()[2].setVisible(true,true);
                }
            }
        }
    });
}
 /**
 * Initializes the RadioButton array of possible answers
 * @param childView the View in which the radio buttons are defined
 */
public void initializeButtons(View childView,Question myQuestion) {
    //array of radioButtons, each button will correspond to a possible answer
    possibleAnswers[0] = (RadioButton) childView.findViewById(R.id.answer1);
    possibleAnswers[1] = (RadioButton) childView.findViewById(R.id.answer2);
    possibleAnswers[2] = (RadioButton) childView.findViewById(R.id.answer3);
    possibleAnswers[3] = (RadioButton) childView.findViewById(R.id.answer4);
    for(int i=0;i<possibleAnswers.length;i++){
        if(Integer.parseInt(myQuestion.getAnswer()) - 1 == i){
            possibleAnswers[i].setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.checkmark, 0);
            possibleAnswers[i].getCompoundDrawables()[2].setVisible(false,true);
        }
        else{
            possibleAnswers[i].setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.wrong, 0);
            possibleAnswers[i].getCompoundDrawables()[2].setVisible(false,true);
        }
    }
}发布于 2016-09-06 03:06:50
您可以在每个无线电按钮旁边添加一个图像,在正确答案旁边加上绿色检查,在错误答案旁边添加红色X,用setVisibility(GONE);编程将它们全部生成,当您想要显示正确答案时,只对正确的答案和所选的答案显示正确的setVisibility(VISIBLE)。
https://stackoverflow.com/questions/39339130
复制相似问题