Proyectos de Subversion Android Microlearning

Rev

Rev 4 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

package com.cesams.twogetskills.adapter;

import android.content.Context;
import android.os.Build;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioButton;

import androidx.recyclerview.widget.RecyclerView;
import com.cesams.twogetskills.R;
import com.cesams.twogetskills.entity.Answer;
import com.cesams.twogetskills.entity.Question;
import com.cesams.twogetskills.pojo.QuizResponse;
import java.util.List;
import com.codesgood.views.JustifiedTextView;

public class QuizSingleAnswerListViewAdapter extends RecyclerView.Adapter<QuizSingleAnswerListViewAdapter.ViewHolder> {
    private final static String TAG = "C2GS - QuizSingleAdapter";
    private Question mQuestion;
    private List<Answer> mAnswers;
    private List<QuizResponse> mQuizResponses;
    private LayoutInflater mInflater;
    private int selected = -1;

    // data is passed into the constructor
    public QuizSingleAnswerListViewAdapter(Context context, Question question,  List<Answer> answers, List<QuizResponse> quizResponses) {
        this.mInflater = LayoutInflater.from(context);
        this.mQuestion = question;
        this.mAnswers = answers;
        this.mQuizResponses = quizResponses;
    }
    // inflates the row layout from xml when needed
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.fragment_quiz_single_answer_item, parent, false);
        return new ViewHolder(view);
    }

    // binds the data to the TextView in each row
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Answer mAnswer = mAnswers.get(position);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            holder.mText.setText("" + Html.fromHtml(mAnswer.getText(), Html.FROM_HTML_MODE_COMPACT));
        } else {
            holder.mText.setText("" + Html.fromHtml(mAnswer.getText()));
        }

        if(position == selected) {
            holder.mRadioButton.setChecked(true);
        } else {
            holder.mRadioButton.setChecked(false);
        }
    }

    // total number of rows
    @Override
    public int getItemCount() {
        return mAnswers.size();
    }


    // stores and recycles views as they are scrolled off screen
    public class ViewHolder extends RecyclerView.ViewHolder  {
        JustifiedTextView mText;
        RadioButton mRadioButton;

        ViewHolder(View itemView) {
            super(itemView);
            mText = (JustifiedTextView) itemView.findViewById(R.id.fragment_quiz_single_answer_item_justifytextview);
            mRadioButton = (RadioButton) itemView.findViewById(R.id.fragment_quiz_single_answer_item_radio);
            mRadioButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    selected = getAdapterPosition();
                    Answer answer = mAnswers.get(selected);

                    int position = -1;
                    for(int i = 0; i < mQuizResponses.size(); i++)
                    {
                        if(mQuestion.getUuid().equals(mQuizResponses.get(i).getQuestionUuid())){
                            position = i;
                            break;
                        }
                    }



                    if(position > -1) {
                        mQuizResponses.get(position).setAnswerUuid(answer.getUuid());
                        mQuizResponses.get(position).setPoints(answer.getCorrect().equalsIgnoreCase("y") ? mQuestion.getPoints() : 0);
                    } else {
                        QuizResponse quizResponse = new QuizResponse();
                        quizResponse.setAnswerUuid(answer.getUuid());
                        quizResponse.setQuestionUuid(mQuestion.getUuid());
                        quizResponse.setQuizUuid(mQuestion.getQuizUuid());
                        quizResponse.setValue(0);
                        quizResponse.setPoints(answer.getCorrect().equalsIgnoreCase("y") ? mQuestion.getPoints() : 0);
                        mQuizResponses.add(quizResponse);
                    }


                    notifyDataSetChanged();
                }
            });
        }

    }

    public void resetSelection()
    {
        selected = -1;
    }

    // convenience method for getting data at click position
    public Answer getItem(int id) {
        return mAnswers.get(id);
    }


}