How To Handle Multiple Complex Views In RecyclerView

Posted By : Keshav Gupta | 28-Jun-2017

Introduction:

In adapter class of application there are method getItemViewType(). This method returns particular view type depending upon specified conditions.So bases on that type we can assign different viewtype while creatingViews and can perform task onbindview depending upon viewtype.

 getItemViewType() :

  • There are thirteen typeversion in the code. Each type is taken for a different view.
  •  getItemViewType() will return typever  depending upon specified conditions i.e I have used getItemQuestionType()  method which returns what viewtype is currently returned.
  • So getItemQuestionType() .equals("1") will return typever1.In a way if getItemQuestionType() .equals("2") it will return typever2 further according to method getItemViewType()
  • Each typever is taken for specifying different layout in a parentview(RecyclerView)

onCreateViewHolder():

  • onCreateViewHolder is having a parameter type. So we will compare typever with type returned  in method.So if type retuned from method call will match with which of typever there we can create our views differently based on that type

MyViewHolder class:

  This class is taking a call back from onCreateViewHolder which will be getting particularViewHolder with its type from caller.Now views can be find according to type and managed to avoid crashes.

onBindViewHolder():

You can do whatever you want to perform action on specified views events as described in code.

  • When recyclerview is scrolled then onBindViewHolder is called automatically by system which bind the view with data element.
  • So in this method there are two parameter one is MyViewHolder and next is i that is a position index for view scrolled
  • So first call using getItemViewType we calculate what typeview is scrolled 
  • Depending upon that using specific conditions only the view which is of particular view type is overrided with certain action so to avoid crashes and maintain easy flow in one method only.

See code below for your reference:

public class MyFirstScreenRecyclerAdapter extends RecyclerView.Adapter<MyFirstScreenRecyclerAdapter.MyViewHolder> {

    Context context;
    private String[] ansID_14 = new String[]{"39", "40", "41", "42", "43", "44"};
    private String[] answers_14 = new String[]{"Very Dissatisfied", "Somewhat Dissatisfied", "Netural", "Somewhat Satisfied", "Very Satisfied", "Not Applicable"};
    private ArrayList<QuestionBean> arrayList;
    private static final int typever1 = 1;
    private static final int typever2 = 2;
    private static final int typever3 = 3;
    private static final int typever4 = 4;
    private static final int typever6 = 6;
    private static final int typever7 = 7;
    private static final int typever8 = 8;
    private static final int typever10 = 10;
    private static final int typever11 = 11;
    private static final int typever14 = 14;
    private static final int typever15 = 15;
    private static final int typeverminusone = -1;
    private DisplayMetrics metrics;
    int listpos;
    int scrPos;
    int increasedHeight,observedheight;
    private HorizontalListAdapter1 horizontalListAdapter1;
    private HorizontalListAdapter2 horizontalListAdapter2;
    private QuestionInnerListAdapterType3 adapterType3;
    private QuestionInnerListAdapterType6 adapterType6;
    private QuestionInnerListAdapterType8 adapterType8;
    private QuestionInnerListAdapterType8_new adapterType8_new;
    private QuestionInnerListAdapterType10 adapterType10;
    private QuestionInnerListAdapterType11 adapterType11;
    private QuestionInnerListAdapterType11_new adapterType11_new;
    private QuestionInnerListAdapterType15 adapterType15;
    private QuestionInnerListAdapterType99 adapterType99;
    private PatientSignalsDB data;
    private Fragment mFragment;
    private RecyclerView mRecyclerView;
    private LinearLayout linearLayoutMain;
    private RelativeLayout r_layout_main;

    private final int minDelta = 300;           // threshold in ms
    private long focusTime = 0;                 // time of last touch
    private View focusTarget = null;

    public MyFirstScreenRecyclerAdapter(Context context, ArrayList<QuestionBean> arrayList, int scrPos, Fragment fragment, RecyclerView mRecyclerView, LinearLayout linearLayoutMain,RelativeLayout r_layout_main) {
        this.context = context;
        this.arrayList = arrayList;
        this.scrPos = scrPos;
        this.mFragment = fragment;
        this.mRecyclerView = mRecyclerView;
       // handler=new Handler();
        data = new PatientSignalsDB(context, PatientSignalsDB.DBNAME, null, PatientSignalsDB.dver);
        metrics = new DisplayMetrics();
        ((Activity) context).getWindow().getWindowManager().getDefaultDisplay().getMetrics(metrics);
         this.linearLayoutMain=linearLayoutMain;
        this.r_layout_main=r_layout_main;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView mQuestionTitle1, mQuestionTitle2, mQuestionTitle3, mQuestionTitle4, mQuestionTitle6,
                mQuestionTitle7, mQuestionTitle8, mQuestionTitle10, mQuestionTitle11, mQuestionTitle14, mQuestionTitle15, mQuestionTitle99;
        public ListView mListView3, mListView8, mListView10, mListView15;
        public RecyclerView mHorizontalListView1, mHorizontalListView2, mHorizontalListView6;
        public EditText mAnswerBox4, mAnswerBox7;
        public TextView mViewBox7, mLimitAns7, mLimitAns8;
        public TextView mLeftAnchor11, mRightAnchor11;
        public ImageView very_disappoint_iv_14, somewhat_dissatisfied_iv_14, neutral_iv_14, somewhat_satisfied_iv_14, very_satisfied_iv_14, did_not_see_iv_14;
        public SeekBar mSeekbar_Bipolar_11;
        public RecyclerView mHorizontalListView11_new,mHorizontalListView8_new;
        public TextView mViewBoxTotal8,tv_lockViewAns8,tv_lockViewAns7;
        public LinearLayoutManager layoutManager
                = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
        public TextView tv_LeftAnchorView7,tv_RightValue7;
        public SeekBar sb_seektoSingle7;
        public MyViewHolder(View view, int type_lay) {
            super(view);
            if (type_lay == typever1) {
                mQuestionTitle1 = (TextView) view.findViewById(R.id.questionName_1);
                mHorizontalListView1 = (RecyclerView) view.findViewById(R.id.horizontal_view_type_question_1);
                mHorizontalListView1.setLayoutManager(layoutManager);
            } else if (type_lay == typever2) {
                mQuestionTitle2 = (TextView) view.findViewById(R.id.questionName_2);
                mHorizontalListView2 = (RecyclerView) view.findViewById(R.id.horizontal_view_type_question_2);
                mHorizontalListView2.setLayoutManager(layoutManager);
            } else if (type_lay == typever3) {
                mQuestionTitle3 = (TextView) view.findViewById(R.id.questionName_3);
                mListView3 = (ListView) view.findViewById(R.id.listView_3);
            } else if (type_lay == typever4) {
                mQuestionTitle4 = (TextView) view.findViewById(R.id.questionName_4);
                mAnswerBox4 = (EditText) view.findViewById(R.id.editText_4);
            } else if (type_lay == typever6) {
                mQuestionTitle6 = (TextView) view.findViewById(R.id.questionName_6);
                mHorizontalListView6 = (RecyclerView) view.findViewById(R.id.horizontal_view_type_question_6);
                mHorizontalListView6.setLayoutManager(layoutManager);
            } else if (type_lay == typever7) {
                mQuestionTitle7 = (TextView) view.findViewById(R.id.questionName_7);
                mLimitAns7 = (TextView) view.findViewById(R.id.ans_limit7);
                tv_LeftAnchorView7=(TextView) view.findViewById(R.id.left_anchor_ans_view7);
                tv_RightValue7=(TextView) view.findViewById(R.id.right_value_view7);
                tv_lockViewAns7=(TextView) view.findViewById(R.id.tv_lockanswer_view7);
                sb_seektoSingle7=(SeekBar)view.findViewById(R.id.idRangeSeekBarSingle7);
            } else if (type_lay == typever8) {
                mQuestionTitle8 = (TextView) view.findViewById(R.id.questionName_8);
                mLimitAns8 = (TextView) view.findViewById(R.id.ans_limit8);
                mListView8 = (ListView) view.findViewById(R.id.listView_8);
                mViewBoxTotal8 = (TextView) view.findViewById(R.id.right_main_value_view);
                tv_lockViewAns8=(TextView) view.findViewById(R.id.tv_lockanswer_view);
            } else if (type_lay == typever10) {
                mQuestionTitle10 = (TextView) view.findViewById(R.id.questionName_10);
                mListView10 = (ListView) view.findViewById(R.id.listview_10);
            } else if (type_lay == typever11) {
                mQuestionTitle11 = (TextView) view.findViewById(R.id.questionName_11);
                mSeekbar_Bipolar_11 = (SeekBar) view.findViewById(R.id.idRangeSeekBar_Bipolar);
                mLeftAnchor11 = (TextView) view.findViewById(R.id.textviewleftanchor_11);
                mRightAnchor11 = (TextView) view.findViewById(R.id.textviewrightanchor_11);
                mHorizontalListView11_new = (RecyclerView) view.findViewById(R.id._horizontal_label_type_question_11);

            } else if (type_lay == typever14) {
                mQuestionTitle14 = (TextView) view.findViewById(R.id.questionName_14);
                very_disappoint_iv_14 = (ImageView) view.findViewById(R.id.very_disappoint_iv);
                somewhat_dissatisfied_iv_14 = (ImageView) view.findViewById(R.id.somewhat_dissatisfied_iv);
                neutral_iv_14 = (ImageView) view.findViewById(R.id.neutral_iv);
                somewhat_satisfied_iv_14 = (ImageView) view.findViewById(R.id.somewhat_satisfied_iv);
                very_satisfied_iv_14 = (ImageView) view.findViewById(R.id.very_satisfied_iv);
                did_not_see_iv_14 = (ImageView) view.findViewById(R.id.did_not_see_iv);
            } else if (type_lay == typever15) {
                mQuestionTitle15 = (TextView) view.findViewById(R.id.questionName_15);
                mListView15 = (ListView) view.findViewById(R.id.listview_15);
            }
        }

    }

    @Override
    public int getItemViewType(int position) {
        try {
            listpos = position;
            if (arrayList.get(position).getQuestion_type().equals("1")) {
                return typever1;
            } else if (arrayList.get(position).getQuestion_type().equals("2")) {
                return typever2;
            } else if (arrayList.get(position).getQuestion_type().equals("3")) {
                return typever3;
            } else if (arrayList.get(position).getQuestion_type().equals("4")) {
                return typever4;
            } else if (arrayList.get(position).getQuestion_type().equals("6")) {
                return typever6;
            } else if (arrayList.get(position).getQuestion_type().equals("7")) {
                return typever7;
            } else if (arrayList.get(position).getQuestion_type().equals("8")) {
                return typever8;
            } else if (arrayList.get(position).getQuestion_type().equals("10")) {
                return typever10;
            } else if (arrayList.get(position).getQuestion_type().equals("11")) {
                return typever11;
            } else if (arrayList.get(position).getQuestion_type().equals("11")) {
                return typever11;
            } else if (arrayList.get(position).getQuestion_type().equals("14")) {
                return typever14;
            } else if (arrayList.get(position).getQuestion_type().equals("15")) {
                return typever15;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //return -1;
        return typeverminusone;
    }

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

        int rowType = viewType;//getItemViewType(viewType);
        View itemView = null;
        int type = 0;
        try {
            switch (rowType) {
                case typever1:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type_1, parent, false);
                    type = typever1;
                    break;
                case typever2:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type_2, parent, false);
                    type = typever2;
                    break;
                case typever3:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type3, parent, false);
                    type = typever3;
                    break;
                case typever4:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type4, parent, false);
                    type = typever4;
                    break;
                case typever6:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type6, parent, false);
                    type = typever6;
                    break;
                case typever7:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type7_new, parent, false);
                    type = typever7;
                    break;
                case typever8:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type_8_new, parent, false);
                    type = typever8;
                    break;
                case typever10:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type10, parent, false);
                    type = typever10;
                    break;
                case typever11:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type11_new, parent, false);
                    type = typever11;
                    break;
                case typever14:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type14, parent, false);
                    type = typever14;
                    break;
                case typever15:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type15, parent, false);
                    type = typever15;
                    break;
                case typeverminusone:
                    itemView = LayoutInflater.from(context).inflate(R.layout.inflate_layout_question_type_minusone, parent, false);
                    type = typeverminusone;
                    break;
                default:

                    break;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        if (itemView != null) {
            return new MyViewHolder(itemView, type);
        } else {
            return null;
        }
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int i) {
        try {
            int rowType = getItemViewType(i);

            if (rowType == typever1) {
                holder.mQuestionTitle1.setText(arrayList.get(i).getQuestion());
                boolean status_NextQtype15=false;
                if(arrayList.size()!=i+1)
                {
                    status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                }

                ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever1, arrayList.get(i).getQuestion_id());
                horizontalListAdapter1 = new HorizontalListAdapter1(context, arrayListForAns, listpos, arrayList.get(i).getQuestion_type(), mRecyclerView, i,status_NextQtype15);
                if (holder.mHorizontalListView1 != null) {
                    holder.mHorizontalListView1.setAdapter(horizontalListAdapter1);
                }
            } else if (rowType == typever2) {
                holder.mQuestionTitle2.setText(arrayList.get(i).getQuestion());
                boolean status_NextQtype15=false;
                if(arrayList.size()!=i+1)
                {
                    status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                }
                ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever2, arrayList.get(i).getQuestion_id());
                horizontalListAdapter2 = new HorizontalListAdapter2(context, arrayListForAns, listpos, arrayList.get(i).getQuestion_type(), mRecyclerView, i,status_NextQtype15);
                if (holder.mHorizontalListView2 != null) {
                    holder.mHorizontalListView2.setAdapter(horizontalListAdapter2);
                }
            } else if (rowType == typever3) {
                holder.mQuestionTitle3.setText(arrayList.get(i).getQuestion());
                boolean status_NextQtype15=false;
                if(arrayList.size()!=i+1)
                {
                    status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                }
                ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever3, arrayList.get(i).getQuestion_id());
                adapterType3 = new QuestionInnerListAdapterType3(context, arrayListForAns, arrayList.get(i).getQuestion_type(), mRecyclerView, i,status_NextQtype15);
                if (holder.mListView3 != null) {
                    holder.mListView3.setAdapter(adapterType3);
                    AppConstants.justifyListViewHeightBasedOnChildren(holder.mListView3,40);
                }
            } else if (rowType == typever4) {
                holder.mQuestionTitle4.setText(arrayList.get(i).getQuestion());
                holder.mAnswerBox4.setHint("Please enter answer upto " + arrayList.get(i).getQuestion_limit() + " characters");
                holder.mAnswerBox4.setFilters(new InputFilter[]{new InputFilter.
                        LengthFilter(Integer.valueOf(arrayList.get(i).getQuestion_limit()))});

                final ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever4, arrayList.get(i).getQuestion_id());
                if (arrayListForAns.get(0).getTextAns().trim().length() > 0) {
                    holder.mAnswerBox4.setText(arrayListForAns.get(0).getTextAns());
                }
                holder.mAnswerBox4.setId(i);
                holder.mAnswerBox4.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                    @Override
                    public void onFocusChange(final View view, boolean hasFocus) {

                        long t = System.currentTimeMillis();
                        long delta = t - focusTime;
                        if (hasFocus) {     // gained focus
                            if (delta > minDelta) {
                                focusTime = t;
                                focusTarget = view;
                            }
                        }
                        else {              // lost focus
                            if (delta <= minDelta  &&  view == focusTarget) {
                                focusTarget.post(new Runnable() {   // reset focus to target
                                    public void run() {
                                        focusTarget.requestFocus();
                                    }
                                });
                            }
                        }
                    }
                });

              

                holder.mAnswerBox4.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                    @Override
                    public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
                        if (actionId == EditorInfo.IME_ACTION_DONE) {
                            restoreHeight();
                            hideSoftKeyboard((Activity) context);
                            //mRecyclerView.setNestedScrollingEnabled(true);
                            if(mRecyclerView!=null)
                            {
                                mRecyclerView.smoothScrollToPosition(i + 1);
                            }

                            return true;
                        }
                        return false;
                    }
                });
                holder.mAnswerBox4.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                    }

                    @Override
                    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                        if (charSequence.length() == 0) {
                            arrayListForAns.get(0).setTextAns("");
                            arrayListForAns.get(0).setIsAnsweredCorrect(false);
                        }
                    }

                    @Override
                    public void afterTextChanged(Editable editable) {
                        try {
                            if (editable.toString().trim().length() > 0) {
                                arrayListForAns.get(0).setTextAns(holder.mAnswerBox4.getText().toString());
                                arrayListForAns.get(0).setIsAnsweredCorrect(true);
                                AppConstants.updateAnswerToQuestion(context, arrayListForAns.get(0).getFor_quesnid(),
                                        arrayList.get(i).getQuestion_type(), holder.mAnswerBox4.getText().toString(), arrayListForAns.get(0).getAnswer_id());

                            } else {
                                arrayListForAns.get(0).setTextAns("");
                                arrayListForAns.get(0).setIsAnsweredCorrect(false);
                                Toast.makeText(context, "Input your answer", Toast.LENGTH_SHORT).show();
                            }
                        } catch (NumberFormatException e) {
                            e.printStackTrace();
                        }
                    }
                });

            } else if (rowType == typever6) {
                holder.mQuestionTitle6.setText(arrayList.get(i).getQuestion());
                boolean status_NextQtype15=false;
                if(arrayList.size()!=i+1)
                {
                    status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                }
                ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever6, arrayList.get(i).getQuestion_id());
                adapterType6 = new QuestionInnerListAdapterType6(context, arrayListForAns, listpos, arrayList.get(i).getQuestion_type(), mRecyclerView, i,status_NextQtype15);
                if (holder.mHorizontalListView6 != null) {
                    holder.mHorizontalListView6.setAdapter(adapterType6);
                }
            } else if (rowType == typever7) {
                holder.mQuestionTitle7.setText(arrayList.get(i).getQuestion());
                //holder.mLimitAns7.setText("(Please type a number between " + arrayList.get(i).getQuestion_limit() + " to " + arrayList.get(i).getUpperlimit() + " or equal to upper and below limit)");
                holder.mLimitAns7.setText(Html.fromHtml("(Please slide the appropriate bar to indicate progress.NOTE:Progress must lie between <B>" + arrayList.get(i).getQuestion_limit() + "</B> to <B>" + arrayList.get(i).getUpperlimit() + "</B> or equal to upper and below limit)"));
                final ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever7, arrayList.get(i).getQuestion_id());
//                holder.mViewBox7.setText(arrayListForAns.get(0).getQuesn_ans());
                holder.tv_LeftAnchorView7.setText(arrayListForAns.get(0).getQuesn_ans());
                holder.sb_seektoSingle7.setMax(Integer.valueOf(arrayList.get(i).getUpperlimit()));
                holder.sb_seektoSingle7.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                    @Override
                    public void onProgressChanged(SeekBar seekBar, int index, boolean b) {
                        holder.tv_RightValue7.setText(index + "");

                    }

                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {

                    }

                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {
                        if (seekBar.getProgress() >= Integer.valueOf(arrayList.get(i).getQuestion_limit())) {
                            Log.e("PROGRESS", "" + seekBar.getProgress());
                            arrayListForAns.get(0).setTotal_val(seekBar.getProgress());
                            arrayListForAns.get(0).setIsAnsweredCorrect(true);
                            AppConstants.updateAnswerToQuestion(context, arrayListForAns.get(0).getFor_quesnid(),
                                    arrayList.get(i).getQuestion_type(), "" + seekBar.getProgress(), arrayListForAns.get(0).getAnswer_id());
                            hideSoftKeyboard((Activity) context);
                            boolean status_NextQtype15 = false;
                            if (arrayList.size() != i + 1) {
                                status_NextQtype15 = isNextQuestionType15(i + 1, arrayList);
                            }
                            if (status_NextQtype15) {
                                int scrollheight = context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                                if (mRecyclerView != null) {
                                    mRecyclerView.smoothScrollBy(0, scrollheight);
                                }
                            } else {
                                if (mRecyclerView != null) {
                                    mRecyclerView.smoothScrollToPosition(i + 1);
                                }
                            }

                        }
                        else
                        {
                            arrayListForAns.get(0).setTotal_val(0);
                            arrayListForAns.get(0).setIsAnsweredCorrect(false);
                            AppConstants.updateAnswerToQuestion(context, arrayListForAns.get(0).getFor_quesnid(),
                                   "","","");
                        }
                    }
                });
             holder.tv_lockViewAns7.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View view) {
                     if(holder.sb_seektoSingle7.getProgress()<Integer.valueOf(arrayList.get(i).getQuestion_limit()))
                     {
                         showPopUpInvalidType7(context);
                     }
                     else
                     {
                         boolean status_NextQtype15 = false;
                         if (arrayList.size() != i + 1) {
                             status_NextQtype15 = isNextQuestionType15(i + 1, arrayList);
                         }
                         if (status_NextQtype15) {
                             int scrollheight = context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                             if (mRecyclerView != null) {
                                 mRecyclerView.smoothScrollBy(0, scrollheight);
                             }
                         } else {
                             if (mRecyclerView != null) {
                                 mRecyclerView.smoothScrollToPosition(i + 1);
                             }
                         }
                     }
                 }
             });

            } else if (rowType == typever8) {
                holder.mQuestionTitle8.setText(arrayList.get(i).getQuestion());
               // holder.mLimitAns8.setText("(Please type a number between " + arrayList.get(i).getUpperlimit() + " to " + arrayList.get(i).getQuestion_limit() + ")");
                holder.mLimitAns8.setText(Html.fromHtml("(Please slide the appropriate bar to indicate progress.NOTE:Progress must sum to <B>" + arrayList.get(i).getQuestion_limit() + "</B>)"));
                //holder.mViewBoxTotal8.setText(arrayList.get(i).getQuestion_limit());
                boolean status_NextQtype15=false;
                if(arrayList.size()!=i+1)
                {
                    status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                }
                ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever8, arrayList.get(i).getQuestion_id());
                //adapterType8 = new QuestionInnerListAdapterType8(context, arrayListForAns, arrayList.get(i).getUpperlimit(), arrayList.get(i).getQuestion_limit(), arrayList.get(i).getQuestion_type(), mRecyclerView, i,status_NextQtype15);
                adapterType8_new = new QuestionInnerListAdapterType8_new(context, arrayListForAns, arrayList.get(i).getUpperlimit(), arrayList.get(i).getQuestion_limit(), arrayList.get(i).getQuestion_type(), mRecyclerView, i,status_NextQtype15,arrayList.get(i).getQuestion_limit(),holder.mViewBoxTotal8,holder.tv_lockViewAns8);
                if (holder.mListView8 != null) {
                    holder.mListView8.setAdapter(adapterType8_new);
                    holder.mListView8.setItemsCanFocus(true);
                    AppConstants.justifyListViewHeightBasedOnChildren(holder.mListView8,0);
                }
            } else if (rowType == typever10) {
                holder.mQuestionTitle10.setText(arrayList.get(i).getQuestion());
                boolean status_NextQtype15=false;
                if(arrayList.size()!=i+1)
                {
                    status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                }
                ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever10, arrayList.get(i).getQuestion_id());
                adapterType10 = new QuestionInnerListAdapterType10(context, arrayListForAns, arrayList.get(i).getQuestion_type(), mRecyclerView, i,status_NextQtype15);
                if (holder.mListView10 != null) {
                    holder.mListView10.setAdapter(adapterType10);
                    //holder.mListView10.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
                    holder.mListView10.setItemsCanFocus(true);
                    AppConstants.justifyListViewHeightBasedOnChildren(holder.mListView10,0);
                }
            } else if (rowType == typever11) {
                holder.mQuestionTitle11.setText(arrayList.get(i).getQuestion());
                final String q_id = arrayList.get(i).getQuestion_id();
                final ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever11, arrayList.get(i).getQuestion_id());
               /* adapterType11 = new QuestionInnerListAdapterType11(context, arrayListForAns, listpos, arrayList.get(i).getQuestion_type(),mRecyclerView,i);
                if (holder.mHorizontalListView11 != null) {
                    holder.mHorizontalListView11.setAdapter(adapterType11);
                }*/
                ///holder.mSeekbar_Bipolar_11.setMax(arrayListForAns.size());
                holder.mSeekbar_Bipolar_11.setMax(100);
                holder.mSeekbar_Bipolar_11.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                    int seekvalue;
                    float input_percentage;

                    @Override
                    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                        seekvalue = i;

                    }

                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {

                    }

                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {

                        input_percentage = (float) (seekvalue * arrayListForAns.size()) / 100;
                        // Toast.makeText(context, seekvalue + "," + input_percentage, Toast.LENGTH_SHORT).show();

                        int progress_indexvalue = 0;
                        if (input_percentage == (int) input_percentage) {
                            Log.e("Value", "if");
                            progress_indexvalue = (int) input_percentage;
                            holder.mSeekbar_Bipolar_11.setProgress(seekvalue);
                        } else {
                            Log.e("Value", "else");
                            int int_value = (int) input_percentage;
                            float med_value = int_value + 0.5f;
                            if (input_percentage < med_value) {
                                progress_indexvalue = int_value;
                                int updatdProgress = (progress_indexvalue * 100) / arrayListForAns.size();
                                holder.mSeekbar_Bipolar_11.setProgress(updatdProgress);
                            } else {
                                progress_indexvalue = int_value + 1;
                                int updatdProgress = (progress_indexvalue * 100) / arrayListForAns.size();
                                holder.mSeekbar_Bipolar_11.setProgress(updatdProgress);

                            }
                        }
                        if (progress_indexvalue > 0) {
                            String answerId = "", answerPatient = "";
                            for (int i = 0; i < arrayListForAns.size(); i++) {
                                AnswerModel model = arrayListForAns.get(i);
                                int selectPos = i + 1;
                                if (progress_indexvalue == selectPos) {
                                    answerId = model.getAnswer_id();
                                    answerPatient = model.getQuesn_ans();
                                }
                            }
                            Log.e("ANS", answerId);
                            AppConstants.updateAnswerToQuestion(context, q_id,
                                    "" + typever11, answerPatient, answerId);

                            boolean status_NextQtype15=false;
                            if(arrayList.size()!=i+1)
                            {
                                status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                            }
                            if (status_NextQtype15) {
                                int scrollheight=context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                                if(mRecyclerView!=null)
                                {
                                    mRecyclerView.smoothScrollBy(0, scrollheight);
                                }
                            } else {
                                if (mRecyclerView != null) {
                                    mRecyclerView.smoothScrollToPosition(i + 1);
                                }
                            }

                        }

                    }
                });

                adapterType11_new = new QuestionInnerListAdapterType11_new(context, arrayListForAns, listpos, arrayList.get(i).getQuestion_type(), mRecyclerView, i, holder.mLeftAnchor11);

                if (holder.mHorizontalListView11_new != null) {
                    holder.mHorizontalListView11_new.setLayoutManager(new GridLayoutManager(context, arrayListForAns.size()));
                    holder.mHorizontalListView11_new.setAdapter(adapterType11_new);
                }

                int q_pad_both = context.getResources().getDimensionPixelSize(R.dimen.q_pad_left_type11);
                holder.mLeftAnchor11.setText(arrayList.get(i).getLeft_anchor());
                holder.mLeftAnchor11.setX((metrics.widthPixels / arrayListForAns.size()) - (q_pad_both * 2));
                holder.mRightAnchor11.setText(arrayList.get(i).getRight_anchor());

            } else if (rowType == typever14) {
                holder.mQuestionTitle14.setText(arrayList.get(i).getQuestion());

                final ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever14, arrayList.get(i).getQuestion_id());
                if (arrayListForAns.get(0).isAnsweredCorrect()) {
                    holder.very_disappoint_iv_14.setImageResource(R.mipmap.very_dissatisfied_select);
                } else if (arrayListForAns.get(1).isAnsweredCorrect()) {
                    holder.somewhat_dissatisfied_iv_14.setImageResource(R.mipmap.somewhat_dissatisfied_select);
                } else if (arrayListForAns.get(2).isAnsweredCorrect()) {
                    holder.neutral_iv_14.setImageResource(R.mipmap.nature_select);
                } else if (arrayListForAns.get(3).isAnsweredCorrect()) {
                    holder.somewhat_satisfied_iv_14.setImageResource(R.mipmap.somewhat_satisfied_select);
                } else if (arrayListForAns.get(4).isAnsweredCorrect()) {
                    holder.very_satisfied_iv_14.setImageResource(R.mipmap.very_satisfied_selected);
                } else if (arrayListForAns.get(5).isAnsweredCorrect()) {
                    holder.did_not_see_iv_14.setImageResource(R.mipmap.did_not_see_select);
                }

                holder.very_disappoint_iv_14.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        holder.very_disappoint_iv_14.setImageResource(R.mipmap.very_dissatisfied_select);
                        holder.somewhat_dissatisfied_iv_14.setImageResource(R.mipmap.somewhat_dissatisfied);
                        holder.neutral_iv_14.setImageResource(R.mipmap.nature_unselect);
                        holder.somewhat_satisfied_iv_14.setImageResource(R.mipmap.somewhat_satisfied);
                        holder.very_satisfied_iv_14.setImageResource(R.mipmap.very_satisfied);
                        holder.did_not_see_iv_14.setImageResource(R.mipmap.n_a_unselected);
                        arrayListForAns.get(0).setIsAnsweredCorrect(true);
                        arrayListForAns.get(1).setIsAnsweredCorrect(false);
                        arrayListForAns.get(2).setIsAnsweredCorrect(false);
                        arrayListForAns.get(3).setIsAnsweredCorrect(false);
                        arrayListForAns.get(4).setIsAnsweredCorrect(false);
                        arrayListForAns.get(5).setIsAnsweredCorrect(false);
                        AppConstants.updateAnswerToQuestion(context, arrayListForAns.get(0).getFor_quesnid(),
                                arrayList.get(i).getQuestion_type(), answers_14[0], ansID_14[0]);
                        boolean status_NextQtype15=false;
                        if(arrayList.size()!=i+1)
                        {
                            status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                        }
                        if (status_NextQtype15) {
                            //int scrollheight=context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                            int scrollheight=context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                            mRecyclerView.smoothScrollBy(0, scrollheight);
                        } else {
                            if (mRecyclerView != null) {
                                mRecyclerView.smoothScrollToPosition(i + 1);
                            }
                        }
                        }

                });

                holder.somewhat_dissatisfied_iv_14.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        holder.very_disappoint_iv_14.setImageResource(R.mipmap.very_dissatisfied);
                        holder.somewhat_dissatisfied_iv_14.setImageResource(R.mipmap.somewhat_dissatisfied_select);
                        holder.neutral_iv_14.setImageResource(R.mipmap.nature_unselect);
                        holder.somewhat_satisfied_iv_14.setImageResource(R.mipmap.somewhat_satisfied);
                        holder.very_satisfied_iv_14.setImageResource(R.mipmap.very_satisfied);
                        holder.did_not_see_iv_14.setImageResource(R.mipmap.n_a_unselected);
                        arrayListForAns.get(0).setIsAnsweredCorrect(false);
                        arrayListForAns.get(1).setIsAnsweredCorrect(true);
                        arrayListForAns.get(2).setIsAnsweredCorrect(false);
                        arrayListForAns.get(3).setIsAnsweredCorrect(false);
                        arrayListForAns.get(4).setIsAnsweredCorrect(false);
                        arrayListForAns.get(5).setIsAnsweredCorrect(false);
                        AppConstants.updateAnswerToQuestion(context, arrayListForAns.get(0).getFor_quesnid(),
                                arrayList.get(i).getQuestion_type(), answers_14[1], ansID_14[1]);
                        boolean status_NextQtype15=false;
                        if(arrayList.size()!=i+1)
                        {
                            status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                        }
                        if (status_NextQtype15) {
                            int scrollheight=context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                            mRecyclerView.smoothScrollBy(0, scrollheight);
                        } else {
                            if (mRecyclerView != null) {
                                mRecyclerView.smoothScrollToPosition(i + 1);
                            }
                        }
                    }
                });

                holder.neutral_iv_14.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        holder.very_disappoint_iv_14.setImageResource(R.mipmap.very_dissatisfied);
                        holder.somewhat_dissatisfied_iv_14.setImageResource(R.mipmap.somewhat_dissatisfied);
                        holder.neutral_iv_14.setImageResource(R.mipmap.nature_select);
                        holder.somewhat_satisfied_iv_14.setImageResource(R.mipmap.somewhat_satisfied);
                        holder.very_satisfied_iv_14.setImageResource(R.mipmap.very_satisfied);
                        holder.did_not_see_iv_14.setImageResource(R.mipmap.n_a_unselected);
                        arrayListForAns.get(0).setIsAnsweredCorrect(false);
                        arrayListForAns.get(1).setIsAnsweredCorrect(false);
                        arrayListForAns.get(2).setIsAnsweredCorrect(true);
                        arrayListForAns.get(3).setIsAnsweredCorrect(false);
                        arrayListForAns.get(4).setIsAnsweredCorrect(false);
                        arrayListForAns.get(5).setIsAnsweredCorrect(false);
                        AppConstants.updateAnswerToQuestion(context, arrayListForAns.get(0).getFor_quesnid(),
                                arrayList.get(i).getQuestion_type(), answers_14[2], ansID_14[2]);
                        boolean status_NextQtype15=false;
                        if(arrayList.size()!=i+1)
                        {
                            status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                        }
                        if (status_NextQtype15) {
                            int scrollheight=context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                            mRecyclerView.smoothScrollBy(0, scrollheight);
                        } else {
                            if (mRecyclerView != null) {
                                mRecyclerView.smoothScrollToPosition(i + 1);
                            }
                        }
                    }
                });

                holder.somewhat_satisfied_iv_14.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        holder.very_disappoint_iv_14.setImageResource(R.mipmap.very_dissatisfied);
                        holder.somewhat_dissatisfied_iv_14.setImageResource(R.mipmap.somewhat_dissatisfied);
                        holder.neutral_iv_14.setImageResource(R.mipmap.nature_unselect);
                        holder.somewhat_satisfied_iv_14.setImageResource(R.mipmap.somewhat_satisfied_select);
                        holder.very_satisfied_iv_14.setImageResource(R.mipmap.very_satisfied);
                        holder.did_not_see_iv_14.setImageResource(R.mipmap.n_a_unselected);
                        arrayListForAns.get(0).setIsAnsweredCorrect(false);
                        arrayListForAns.get(1).setIsAnsweredCorrect(false);
                        arrayListForAns.get(2).setIsAnsweredCorrect(false);
                        arrayListForAns.get(3).setIsAnsweredCorrect(true);
                        arrayListForAns.get(4).setIsAnsweredCorrect(false);
                        arrayListForAns.get(5).setIsAnsweredCorrect(false);
                        AppConstants.updateAnswerToQuestion(context, arrayListForAns.get(0).getFor_quesnid(),
                                arrayList.get(i).getQuestion_type(), answers_14[3], ansID_14[3]);
                        boolean status_NextQtype15=false;
                        if(arrayList.size()!=i+1)
                        {
                            status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                        }
                        if (status_NextQtype15) {
                            int scrollheight=context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                            mRecyclerView.smoothScrollBy(0, scrollheight);
                        } else {
                            if (mRecyclerView != null) {
                                mRecyclerView.smoothScrollToPosition(i + 1);
                            }
                        }
                    }
                });
                holder.very_satisfied_iv_14.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        holder.very_disappoint_iv_14.setImageResource(R.mipmap.very_dissatisfied);
                        holder.somewhat_dissatisfied_iv_14.setImageResource(R.mipmap.somewhat_dissatisfied);
                        holder.neutral_iv_14.setImageResource(R.mipmap.nature_unselect);
                        holder.somewhat_satisfied_iv_14.setImageResource(R.mipmap.somewhat_satisfied);
                        holder.very_satisfied_iv_14.setImageResource(R.mipmap.very_satisfied_selected);
                        holder.did_not_see_iv_14.setImageResource(R.mipmap.n_a_unselected);
                        arrayListForAns.get(0).setIsAnsweredCorrect(false);
                        arrayListForAns.get(1).setIsAnsweredCorrect(false);
                        arrayListForAns.get(2).setIsAnsweredCorrect(false);
                        arrayListForAns.get(3).setIsAnsweredCorrect(false);
                        arrayListForAns.get(4).setIsAnsweredCorrect(true);
                        arrayListForAns.get(5).setIsAnsweredCorrect(false);
                        AppConstants.updateAnswerToQuestion(context, arrayListForAns.get(0).getFor_quesnid(),
                                arrayList.get(i).getQuestion_type(), answers_14[4], ansID_14[4]);
                        boolean status_NextQtype15=false;
                        if(arrayList.size()!=i+1)
                        {
                            status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                        }
                        if (status_NextQtype15) {
                            int scrollheight=context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                            mRecyclerView.smoothScrollBy(0, scrollheight);
                        } else {
                            if (mRecyclerView != null) {
                                mRecyclerView.smoothScrollToPosition(i + 1);
                            }
                        }
                    }
                });
                holder.did_not_see_iv_14.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        holder.very_disappoint_iv_14.setImageResource(R.mipmap.very_dissatisfied);
                        holder.somewhat_dissatisfied_iv_14.setImageResource(R.mipmap.somewhat_dissatisfied);
                        holder.neutral_iv_14.setImageResource(R.mipmap.nature_unselect);
                        holder.somewhat_satisfied_iv_14.setImageResource(R.mipmap.somewhat_satisfied);
                        holder.very_satisfied_iv_14.setImageResource(R.mipmap.very_satisfied);
                        holder.did_not_see_iv_14.setImageResource(R.mipmap.n_a_selected);
                        arrayListForAns.get(0).setIsAnsweredCorrect(false);
                        arrayListForAns.get(1).setIsAnsweredCorrect(false);
                        arrayListForAns.get(2).setIsAnsweredCorrect(false);
                        arrayListForAns.get(3).setIsAnsweredCorrect(false);
                        arrayListForAns.get(4).setIsAnsweredCorrect(false);
                        arrayListForAns.get(5).setIsAnsweredCorrect(true);
                        AppConstants.updateAnswerToQuestion(context, arrayListForAns.get(0).getFor_quesnid(),
                                arrayList.get(i).getQuestion_type(), answers_14[5], ansID_14[5]);
                       /* if (isNextQuestionType15(i + 1, arrayList)) {
                            int scrollheight=context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                            mRecyclerView.smoothScrollBy(0, scrollheight);
                        } else {
                            if (mRecyclerView != null) {
                                mRecyclerView.smoothScrollToPosition(i + 1);
                            }
                        }*/

                        boolean status_NextQtype15=false;
                        if(arrayList.size()!=i+1)
                        {
                            status_NextQtype15=isNextQuestionType15(i+1,arrayList);
                        }
                        if (status_NextQtype15) {
                            int scrollheight=context.getResources().getDimensionPixelSize(R.dimen.size_300px);
                            mRecyclerView.smoothScrollBy(0, scrollheight);
                        } else {
                            if (mRecyclerView != null) {
                                mRecyclerView.smoothScrollToPosition(i + 1);
                            }
                        }

                    }
                });

            } else if (rowType == typever15) {
                holder.mQuestionTitle15.setText(arrayList.get(i).getQuestion());
                ArrayList<AnswerModel> arrayListForAns = getAnswerForQuestion(arrayList.get(i).getAnswer(), i, typever15, arrayList.get(i).getQuestion_id());
                adapterType15 = new QuestionInnerListAdapterType15(context, arrayListForAns, arrayList.get(i).getQuestion_type(), scrPos, i, mFragment, mRecyclerView, i, arrayList.get(i).getQuestion_id());
                if (holder.mListView15 != null) {
                    holder.mListView15.setAdapter(adapterType15);
                    AppConstants.justifyListViewHeightBasedOnChildren(holder.mListView15,0);
                }
            }

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

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

  }

MainActivity.java:

MyFirstScreenRecyclerAdapter adapter=new MyFirstScreenRecyclerAdapter(mActivity,datamodel,1,this,mListQuestion,rLayout,r_layout_main);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(mActivity);
mListQuestion.setLayoutManager(mLayoutManager);
mListQuestion.setItemAnimator(new DefaultItemAnimator());
mListQuestion.setAdapter(adapter);
//mListQuestion.smoothScrollToPosition(adapter.getItemCount());
adapter.notifyDataSetChanged();
// mListQuestion is a recyclerview instance. So just find recyclerview in mainactivity and prepare data with viewtype returning from server and pass data to adapter call.

 

 

 

 

 

About Author

Author Image
Keshav Gupta

Keshav Gupta is Android Developer in Oodles, he always look forward for new tasks and new things to learn more.

Request for Proposal

Name is required

Comment is required

Sending message..