问题
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