2016-09-06 8 views
1

Ive работал над простым приложением, в котором есть функция, где вы можете проверить свои знания, отвечая на несколько вопросов. После выбора ответа (с помощью переключателя), я хочу показать либо галочку, если ответ правильный, либо «X», если ответ неверен, справа от выбранного ответа. По какой-то причине мой код отлично работает для первой попытки, а затем ничего не меняет при выборе других ответов.Подсветка рядом с кнопками?

Heres код (его часть адаптера - вид ребенка)

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

вот как проблема выглядит на экране: problem

Любые идеи? Пожалуйста помоги!

EDIT:

вот что им сейчас делает, пытается играть с видимостью:

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

     } 

    } 
} 

ответ

1

вы можете добавить изображение рядом с каждым радиокнопки, зеленый флажок рядом с правильным ответом и красный крестик рядом неправильный ответ, сделайте их всеми с setVisibility(GONE); программно, и когда вы хотите показать правильные ответы только setVisibility(VISIBLE) только для правильного ответа и выбранного ответа

+0

как можно и видимость извлекаемого? Я знаю, что вы можете использовать setVisible для видимости переключателей, но я хочу, чтобы они отображались всегда и спрятали только чертежи. Вы думаете, я должен добавить изображение рядом с каждой кнопкой? – baki1995

+0

вы должны установитьVisibility для drawables, drawables - ImageView, обрабатывать его в Java-коде и setVisibility (GONE) для ImageView и показывать, что они используют setVisibility (VISIBLE) –

+0

Большое спасибо за вашу помощь. Пожалуйста, проверьте мои изменения, им все еще путают, как это сделать. – baki1995