lundi 14 septembre 2020

How to get data from nested Recycler View having CheckBox?

Actually this screen displays a set of questions and the task is to read the user entered or selected answer. So the my question is, how to get the value from ChooseAdapter to QuestionAdapter and then get all the value from QuestionAdapter to my Activity. My english is little bit weak, sorry for that. And thanks in advance. Sample Screenshot

enter image description here

Main adapter : QuestionAdapter.java

public class QuestionsAdapter extends RecyclerView.Adapter<QuestionsAdapter.RecyclerViewHolder> {

private ArrayList<Question> mRecyclerViewItems;

private static final int MENU_ITEM_VIEW_TYPE = 0;
private static final String TAG = QuestionsAdapter.class.getSimpleName();
private static Context mContext;

private NetworkManager nm;


private boolean visibility = false;

private ChoiceAdapter adapter;

private ArrayList<QuestionsAnswer> questionsAnswers = new ArrayList<>();
ArrayList<ChoiceAnswer> choiceAnswers;

public QuestionsAdapter(Context context, ArrayList<Question> recyclerViewItems) {
    this.mContext = context;
    this.mRecyclerViewItems = recyclerViewItems;

}


@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    //this view contains recycler view under recycler view
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_question, parent, false);
    RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(v);
    return recyclerViewHolder;

}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
    int viewType = getItemViewType(position);

    switch (viewType) {
        case MENU_ITEM_VIEW_TYPE:
        default:
            final RecyclerViewHolder recyclerViewHolder = (RecyclerViewHolder) holder;
            Question data = (Question) mRecyclerViewItems.get(position);


            try {

                recyclerViewHolder.txtQuestion.setText(data.getQuestion());
                recyclerViewHolder.txtQuestionType.setText(data.getQuestionType());

                if (data.getQuestionType().equals("MULT")) {
                    recyclerViewHolder.mRecyclerChoice.setVisibility(View.VISIBLE);
                    recyclerViewHolder.edtQuestion.setVisibility(View.GONE);

                    if (data.getChoices().size() > 0) {

                        adapter = new ChoiceAdapter(mContext, data.getChoices(), position);
                        recyclerViewHolder.mRecyclerChoice.setAdapter(adapter);
                    }


                } else {
                    recyclerViewHolder.mRecyclerChoice.setVisibility(View.GONE);
                    recyclerViewHolder.edtQuestion.setVisibility(View.VISIBLE);
                }

                recyclerViewHolder.btnOk.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        if (data.getQuestionType().equals("MULT")) {

                            Log.v(TAG, "array Data : " + adapter.getChoiceAnswer());
                        } else {
                            Log.v(TAG, "array Data : " + recyclerViewHolder.edtQuestion.getText().toString());
                        }


                    }
                });

            } catch (NullPointerException e) {
                e.printStackTrace();
            }


    }
}


@Override
public int getItemCount() {
    return mRecyclerViewItems.size();
}


class RecyclerViewHolder extends RecyclerView.ViewHolder {

    TextView txtQuestion,txtQuestionType;
    EditText edtQuestion;
    RecyclerView mRecyclerChoice;
    Button btnOk;

    private LinearLayoutManager linearLayoutManager;

    public RecyclerViewHolder(View view) {
        super(view);

        txtQuestion = view.findViewById(R.id.txt_question);
        edtQuestion = view.findViewById(R.id.edt_question);
        mRecyclerChoice = view.findViewById(R.id.recycler_choice);
        btnOk = view.findViewById(R.id.btn_ok);
        txtQuestionType = view.findViewById(R.id.txt_question_type);



        initRecyclerView();

        btnOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (txtQuestionType.getText().toString().equals("MULT")) {

                    Log.v(TAG, "array Data : " + adapter.getChoiceAnswer());
                } else {
                    Log.v(TAG, "array Data : " + edtQuestion.getText().toString());
                }
            }
        });


    }


    private void initRecyclerView() {

        //setting properties of recyclerView
        mRecyclerChoice.setHasFixedSize(true);
        mRecyclerChoice.setHasFixedSize(true);
        linearLayoutManager = new LinearLayoutManager(mContext);
        mRecyclerChoice.setLayoutManager(linearLayoutManager);
    }


}

public static void validation() {
    Toast.makeText(mContext, "testing", Toast.LENGTH_SHORT).show();
}}

for list of CheckBox : ChooseAdapter.java

public class ChoiceAdapter extends RecyclerView.Adapter<ChoiceAdapter.RecyclerViewHolder> {

private ArrayList<Choice> mRecyclerViewItems;

private static final int MENU_ITEM_VIEW_TYPE = 0;
private static final String TAG = ChoiceAdapter.class.getSimpleName();
private Context mContext;

private NetworkManager nm;

// private OnItemClickListener mOnItemClickListener;

private boolean visibility = false;

private static ArrayList<ChoiceAnswer> choiceAnswerArrayList;
private ChoiceAnswer choiceAnswer;
String arrayData;

public ChoiceAdapter(Context context, ArrayList<Choice> recyclerViewItems, int position) {
    this.mContext = context;
    this.mRecyclerViewItems = recyclerViewItems;

    // choiceAnswer.key = 0;
    choiceAnswerArrayList = new ArrayList<>();


    //initializing choiceAnswer
    choiceAnswer = new ChoiceAnswer();
    choiceAnswer.values = new ArrayList<>();
}


@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    //this view contains recycler view under recycler view
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_radio_button, parent, false);
    RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(v);
    return recyclerViewHolder;

}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
    int viewType = getItemViewType(position);

    switch (viewType) {
        case MENU_ITEM_VIEW_TYPE:
        default:
            final RecyclerViewHolder recyclerViewHolder = (RecyclerViewHolder) holder;
            Choice data = (Choice) mRecyclerViewItems.get(position);


            try {

                recyclerViewHolder.checkChoice.setText(data.getChoiceName());

                recyclerViewHolder.checkChoice.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                        arrayData = "";
                        for (int i = 0; i < mRecyclerViewItems.size(); i++) {
                            if (isChecked) {
                                if (!choiceAnswer.values.contains(data.getChoiceID())) {
                                    choiceAnswer.values.add(i, data.getChoiceID());
                                }
                            } else {
                                choiceAnswer.values.remove(data.getChoiceID());
                                // arrayData = choiceAnswer.values.toString().replace("[", "").replace("]", "").trim();
                            }

                            try {

                                arrayData = arrayData + "," + choiceAnswer.values.get(i);
                            }catch (IndexOutOfBoundsException e){
                                e.printStackTrace();
                            }
                        }
                    }
                });

            } catch (NullPointerException e) {
                e.printStackTrace();
            }


    }
}

public String getChoiceAnswer() {
    return arrayData;
}

@Override
public int getItemCount() {
    return mRecyclerViewItems.size();
}


class RecyclerViewHolder extends RecyclerView.ViewHolder {

    CheckBox checkChoice;


    public RecyclerViewHolder(View view) {
        super(view);

        checkChoice = view.findViewById(R.id.check_choice);


    }


}}

Please help me guys I am trying this since last 3 days... I've implemented my own login too, but it didn't working properly.




Aucun commentaire:

Enregistrer un commentaire