按钮旁边的可绘制对象? [英] Drawables next to buttons?

查看:86
本文介绍了按钮旁边的可绘制对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在开发一个简单的应用程序,该应用程序具有一项功能,可以通过回答多项选择题来测试您的知识.选择答案后(通过单选按钮),我想在所选答案的右边显示一个复选标记(如果该答案正确),或者显示"X"(如果该答案不正确).出于某种原因,我的代码在第一次尝试时效果很好,然后在选择其他答案时没有任何改变.

Ive been working on a simple app that has a feature where you can test your knowledge by answering multiple choice questions. After an answer is selected(by the radio button), i want to show either a check mark if the answer is correct, or an "X" if the answer is incorrect, to the right of the selected answer. For some reason, my code works perfectly for the first try, and then doesnt change anything when selecting other answers.

此处是代码(适配器的一部分-子视图)

heres the code (its part of an adapter - child view)

 /**
 * 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>

问题在屏幕上显示的样子: 问题

that's how the problem looks on the screen: problem

有什么想法吗?请帮忙!

Any ideas? Please help!

这是我现在正在做的,试图在能见度上发挥作用:

here's what im doing now, trying to play with visibility:

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

        }

    }
}

推荐答案

您可以在每个单选按钮旁边添加图片,在正确答案旁边添加绿色复选标记,在错误答案旁边添加红色X,以编程方式全部使用setVisibility(GONE);当您想显示正确答案时,仅setVisibility(VISIBLE)仅显示正确答案和所选答案

you can add an image beside every radiobutton, green check beside the correct answer and red X beside the wrong answer, make them all with setVisibility(GONE); programatically, and when you want to show the correct answers just setVisibility(VISIBLE) only for the correct answer and the chosen answer

这篇关于按钮旁边的可绘制对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆