滚动后,Recycler View没有给出正确的位置 [英] Recycler View not giving the correct position after scrolling
问题描述
我使用的GridView的列数为1,并使用了其中的适配器,其中我在使用recyclerView进行水平滚动.为了清楚起见,我有一个gridview作为主视图,其中在适配器中使用了recyclerview.所有元素都相应地显示在视图中,但是在我滚动到要获得的位置后,位置不正确.回收者视图的适配器是:
I have used GridView with number of columns 1 and used adapter in which I am using a recyclerView for horizontal scroll. To be clear I have a gridview as the main view in which recyclerview is used in adapter. All the elements are shown in the view as accordingly but after i scroll the position that I am getting is not the correct position.The Adapter for recycler view is :
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());
//Logger.e("THE MOVIE NAME" , 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);
}
}
对于回收者视图中的项目单击,我这样做是这样的:
For the on item click of the recycler view i am doing it this way :
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) {
// TODO Auto-generated method stub
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) {
}
});
这可能是什么原因?
推荐答案
类似地,我也面临着听众没有获得位置的同样问题. 您可以尝试以下代码:-
Similarly, I face the same problem of listener didn't get position. You can try this code:-
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());
//Logger.e("THE MOVIE NAME" , 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();
}
holder.v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Put your code here
}
});
}
@Override
public int getItemCount() {
return movieList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
private ImageView imageView, tagImage;
View v;
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);
v = itemView;
}
}
这篇关于滚动后,Recycler View没有给出正确的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!