Regarding ProperScrolling in Horizontal Recycler View

橙三吉。 提交于 2019-12-08 15:51:45

问题


I have issues scrolling in horizontal recycler view.For eg if i have 10 items,very first time,I am able to scroll till last item,But if i go to first item and then scroll again to last item,it is not moving to last item.

Is this issue related to scrolling,Should i override for scrolling,if that's case.

This is my fragment class declaration

      LinearLayoutManager layoutManager
            = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
    mRecyclerView = (RecyclerView)v. findViewById(R.id.recycler_view);
    adapter  = new MyRecyclerAdapter(getActivity());
    mRecyclerView.setLayoutManager(layoutManager);
    mRecyclerView.setAdapter(adapter);

and in my adapter

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.CustomViewHolder> {

private Context mContext;
JobSiteActivity mjobSiteActivity;
ImageLoader loader = null;

public MyRecyclerAdapter(Activity activity) {
    this.mContext = activity;
    mjobSiteActivity = (JobSiteActivity)activity;
    loader = mjobSiteActivity.getImageLoader();
}

@Override
public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.image_detail_fragment, null);

    CustomViewHolder viewHolder = new CustomViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(CustomViewHolder customViewHolder, int i) {
    //FeedItem feedItem = feedItemList.get(i);

    //Download image using picasso library
  /*  Picasso.with(mContext).load(feedItem.getThumbnail())
            .error(R.drawable.placeholder)
            .placeholder(R.drawable.placeholder)
            .into(customViewHolder.imageView);*/

    customViewHolder.imageView.setImageUrl(Images.imageThumbUrls[i], loader);
    customViewHolder.imageView.setOnClickListener(clickListener);
    customViewHolder.imageView.setTag(customViewHolder);


    //Setting text view title

}

@Override
public int getItemCount() {
    //return (null != feedItemList ? feedItemList.size() : 0);
    return  Images.imageThumbUrls.length;
}

public class CustomViewHolder extends RecyclerView.ViewHolder {
    protected NetworkImageView imageView;


    public CustomViewHolder(View view) {
        super(view);
        this.imageView = (NetworkImageView) view.findViewById(R.id.imageView);

    }
}


View.OnClickListener clickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        CustomViewHolder holder = (CustomViewHolder) view.getTag();
        int position = holder.getLayoutPosition();
        int position1 = holder.getAdapterPosition();
        Toast.makeText(mContext, "layoutPs"+position+"adapPos"+position, Toast.LENGTH_SHORT).show();
    }
};

}

I am trying to use horizontal Grid view which comes with V17 leanback which also extends recycleView,but Still I am also facing similar sort of issue,

If i try to add any item to recycler view at runtime for eg on taking Photo,it is also not getting added,It allocates space and it is empty?Very hard to understand or debug on this issue.


回答1:


Plz try this

   LinearLayoutManager layoutManager
            = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
   RecyclerView recyclerViewr = (RecyclerView) findViewById(R.id.recyclerView);
   recyclerView.setLayoutManager(layoutManager);

and in adapter

 private class ImageCycleAdapter extends RecyclerView.Adapter<ImageCycleAdapter.ImageViewHolder> {


    private Context context;
    private List<ImageUrls> ids;
     private RecyclerViewClickListener listner;
    private int focusedItem = 0;

    public ImageCycleAdapter(Context context, List<ImageUrls> urlsList, RecyclerViewClickListener listner) {
        this.context = context;
        this.ids = urlsList;
        this.listner = listner;
    }

    @Override
    public ImageCycleAdapter.ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.image_detail_fragment, null);

CustomViewHolder viewHolder = new CustomViewHolder(view);
return viewHolder;
    }

    @Override
    public void onBindViewHolder(ImageCycleAdapter.ImageViewHolder holder, int position) {
       customViewHolder.imageView.setImageUrl(Images.imageThumbUrls[i], loader);
customViewHolder.imageView.setOnClickListener(clickListener);
customViewHolder.imageView.setTag(customViewHolder);



    }
    private void tryMoveSelection(RecyclerView.LayoutManager lm, int position) {
         focusedItem = position;
        notifyItemChanged(focusedItem);
            lm.scrollToPosition(focusedItem);
        notifyDataSetChanged();
    }
    @Override
    public int getItemCount() {
        return ids.size();
    }

    public class ImageViewHolder extends RecyclerView.ViewHolder {
       protected NetworkImageView imageView;

        public ImageViewHolder(View v) {
            super(v);
         this.imageView = (NetworkImageView) view.findViewById(R.id.imageView);
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   // do your action

                }
            });

        }
    }
}

public interface RecyclerViewClickListener {

    public void recyclerImageClicked(View v, int position);
}



回答2:


Try to use layoutManager like this, may help you

LinearLayoutManager layoutManager=new LinearLayoutManager(getApplicationContext(),LinearLayoutManager.HORIZONTAL,false);



回答3:


Try this

Adapter

public class CardAdapter extends
RecyclerView.Adapter<CardAdapter.ViewHolder> {
    ArrayList<String> m_list = new ArrayList<String>();

    public CardAdapter(ArrayList<String> m_list){
        this.m_list = m_list;
    }

    @Override
    public int getItemCount() {
        return m_list.size();
    }

    @Override
    public void onBindViewHolder(ViewHolder hv, int arg1) {
        UrlImageViewHelper.setUrlDrawable(hv.img, m_list.get(arg1),
                R.drawable.ic_launcher, new UrlImageViewCallback() {
                    @Override
                    public void onLoaded(ImageView imageView,
                            Bitmap loadedBitmap, String url,
                            boolean loadedFromCache) {
                    }
                });
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int arg1) {
        View v;

        v = LayoutInflater.from(viewGroup.getContext()).inflate(
                R.layout.friend_recycler_item, viewGroup, false);

        ViewHolder hv = new ViewHolder(v);
        return hv;
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        ImageView img;
        public ViewHolder(View arg1) {
            super(arg1);
            img = (ImageView) arg1.findViewById(R.id.img);
        }
    }
}

In Activity

RecyclerView lstPacks = (RecyclerView) rowView.findViewById(R.id.lstPacks);
lstPacks.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
lstPacks.setLayoutManager(holder.mLayoutManager);

CardAdapter adapter1 = new CardAdapter(list);
lstPacks.setAdapter(holder.adapter1);



回答4:


Thanks for your help.Issue got partially solved partially by giving the predefined width and height each as 100 dp to child views in my case of NetworkImageView of Volley library.Instead of giving of wrap content or match parent,giving predefined width and height worked me :),Not a correct solution ,But issue still persist with horizontalGridView(LeanBack Library)



来源:https://stackoverflow.com/questions/34333274/regarding-properscrolling-in-horizontal-recycler-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!