滚动后,Recycler View没有给出正确的位置 [英] Recycler View not giving the correct position after scrolling

查看:66
本文介绍了滚动后,Recycler View没有给出正确的位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆