I used a GridView with 1 column count and the adapter used, in which I use recyclerView to scroll horizontally. To be clear, I have gridview as the main view in which recyclerview is used in the adapter. All elements are displayed in the view accordingly, but after I scroll through the position that I get, this is not the correct position. Adapter for viewing recyclers:
public class HorizontalRecyclerViewAdapter extends RecyclerView.Adapter<HorizontalRecyclerViewAdapter.ViewHolder>{
private Context context;
private ArrayList<Movie> movieList;
public HorizontalRecyclerViewAdapter(Context context,
ArrayList<Movie> objects) {
this.context = context;
this.movieList = objects;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.movie_item, null);
return new ViewHolder(v);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Movie currentMovie = movieList.get(position);
holder.textView.setText(currentMovie.getMovieName());
try {
UrlImageViewHelper.setUrlDrawable(holder.imageView, currentMovie.getMoviePictureLinkString(), R.drawable.placeholder_logo);
} catch (Exception e) {
holder.imageView.setImageDrawable(context.getResources().getDrawable(R.drawable.placeholder_logo));
}
try {
if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_BOUGHT) {
holder.tagImage.setBackground(context.getResources().getDrawable(R.drawable.tag_upgrade));
} else if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_BUY) {
holder.tagImage.setBackground(context.getResources().getDrawable(R.drawable.tag_buy));
} else if(currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_DEFAULT) {
holder.tagImage.setBackgroundResource(0);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return movieList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
private ImageView imageView, tagImage;
public ViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.textView);
imageView = (ImageView) itemView.findViewById(R.id.imageView);
tagImage = (ImageView) itemView.findViewById(R.id.tag);
}
}
To click the recycler object, I do this as follows:
HorizontalRecyclerViewAdapter adapter = new HorizontalRecyclerViewAdapter(context, categoryMovieList);
holder.hListView.setAdapter(adapter);
final GestureDetector mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
holder.hListView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
View child = recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY());
if (child != null && mGestureDetector.onTouchEvent(motionEvent)) {
int position = recyclerView.getChildPosition(child);
final Movie movie = categoryMovieList.get(position);
if(movie.getMoviePurchaseDetail() == Movie.PURCHASE_DEFAULT) {
LinkConfig
.loadMovieLink(context, movie);
}else if(movie.getMoviePurchaseDetail()==Movie.PURCHASE_BOUGHT){
final CustomDialogManager bought_dialog = new CustomDialogManager(
context,
"You have already bought this movie. Please Upgrade",
CustomDialogManager.MESSAGE);
bought_dialog.build();
bought_dialog.show();
bought_dialog.setPositiveButton("PLAY NOW", new View.OnClickListener() {
@Override
public void onClick(View v) {
LinkConfig
.loadMovieLink(context, movie);
bought_dialog.dismiss();
}
});
bought_dialog.setNegativeButton("OK",
new View.OnClickListener() {
@Override
public void onClick(View v) {
bought_dialog.dismiss();
MultipleUsedMethods.showBuyDialog(
context, movie);
}
});
}else {
MultipleUsedMethods.showBuyDialog(
context, movie);
}
return true;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
What could be the reason for this?
source
share