I have a Recyclerview
that has another Recyclerview
in its list_item (means child Recyclerview
inside parent Recyclerview
)
My child Recyclerview
contains ratingbar
in its list_items.
When I click on my ratingbar
my child Recyclerview
scrolls automatically (example : 5th ratingbar
clicked , its scrolls auto and takes me to 3rd ratingbar)
what i tried
1st attemp :
I used layoutManager.scrollToPosition(moveToPos);
depending on my ratingbar
clicked position
2nd attemp
rvScore.stopScroll();
still no result
Note this issue happpens in some device not all
If wanted to post code I can
employeeSurveyViewHolder.rtBar.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//answerCompleted = answerCompleted + 1;
setRatingClick(v, event, position, employeeSurveyViewHolder);
v.onTouchEvent(event);
return true;
}
});
private void setRatingClick(View v, MotionEvent event, int position, EmployeeViewHolder employeeSurveyViewHolder) {
model = list.get(position);
int stars;
if (event.getAction() == MotionEvent.ACTION_UP) {
float touchPositionX = event.getX();
float width = employeeSurveyViewHolder.rtBar.getWidth();
float starsf = (touchPositionX / width) * 5.0f;
stars = (int) starsf + 1;
if (stars == 5) {
employeeSurveyViewHolder.rtBar.setRating(4);
stars = 4;
} else {
employeeSurveyViewHolder.rtBar.setRating(stars);
}
try {
switch (stars) {
case 1:
employeeSurveyViewHolder.tvRatingStatus.setText("POOR");
model.rating = stars;
if (ratingPos != position) {
answersList.remove(position);
answersList.add(position, "" + model.rating);
answerCompleted = answerCompleted + 1;
ratingPos = position;
} else {
answersList.set(position, "" + model.rating);
}
break;
case 2:
employeeSurveyViewHolder.tvRatingStatus.setText("FAIR");
model.rating = stars;
if (ratingPos != position) {
answersList.remove(position);
answersList.add(position, "" + model.rating);
answerCompleted = answerCompleted + 1;
ratingPos = position;
} else {
answersList.set(position, "" + model.rating);
}
break;
case 3:
employeeSurveyViewHolder.tvRatingStatus.setText("GOOD");
model.rating = stars;
if (ratingPos != position) {
answersList.remove(position);
answersList.add(position, "" + model.rating);
answerCompleted = answerCompleted + 1;
ratingPos = position;
} else {
answersList.set(position, "" + model.rating);
}
break;
case 4:
employeeSurveyViewHolder.tvRatingStatus.setText("EXCELLENT");
model.rating = stars;
if (ratingPos != position) {
answersList.remove(position);
answersList.add(position, "" + model.rating);
answerCompleted = answerCompleted + 1;
ratingPos = position;
} else {
answersList.set(position, "" + model.rating);
}
break;
default:
employeeSurveyViewHolder.rtBar.setRating(0);
break;
}
} catch (Exception e) {
e.printStackTrace();
}
Log.d(TAG, "list.size(): = " + list.size());
Log.d(TAG, "answerCompleted: = " + answerCompleted);
Log.d(TAG, "answersList.size(): = " + answersList.size());
if (list.size() == answerCompleted) { // if nos of question is = to nos of answerCompleted
completedListener.isRatingCompleted(true, "" + answersList, position);
//Log.d(TAG, "setCompleted: = true");
} else {
completedListener.isRatingCompleted(false, "" + answersList, position); // just scrolling the recycler view.
//Log.d(TAG, "setCompleted: = false");
}
// Allow parent to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(false);
v.setPressed(false);
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Disallow parent to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(true);
v.setPressed(true);
}
if (event.getAction() == MotionEvent.ACTION_CANCEL) {
v.setPressed(false);
}
}