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.
Cookies are important to the proper functioning of a site. To improve your experience, we use cookies to remember log-in details and provide secure log-in, collect statistics to optimize site functionality, and deliver content tailored to your interests. Click Agree and Proceed to accept cookies and go directly to the site or click on View Cookie Settings to see detailed descriptions of the types of cookies and choose whether to accept certain cookies while on the site.
About Author
Keshav Gupta
Keshav Gupta is Android Developer in Oodles, he always look forward for new tasks and new things to learn more.