【问题标题】:Regarding ProperScrolling in Horizontal Recycler View关于水平回收器视图中的正确滚动
【发布时间】:2016-03-23 20:15:05
【问题描述】:

我在水平回收器视图中滚动时遇到问题。例如,如果我有 10 个项目,第一次,我可以滚动到最后一个项目,但是如果我转到第一个项目,然后再次滚动到最后一个项目,那就是不移动到最后一项。

这个问题是否与滚动有关,如果是这种情况,我是否应该覆盖滚动。

这是我的片段类声明

      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);

在我的适配器中

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();
    }
};

}

我正在尝试使用 V17 Leanback 附带的水平网格视图,它也扩展了 recycleView,但我仍然面临类似的问题,

如果我尝试在运行时将任何项目添加到回收站视图中,例如在拍照时,它也没有被添加,它分配空间并且它是空的?在这个问题上很难理解或调试。

【问题讨论】:

  • 这可能是您的适配器的问题。如果没有您的代码,几乎不可能给出答案。
  • 我已经更新了代码,我错过了什么
  • 感谢您的帮助。在我的 Volley 库的 NetworkImageView 的情况下,通过将预定义的宽度和高度各为 100 dp 给子视图,问题得到部分解决。而不是提供包装内容或匹配父级,给出预定义的宽度和高度对我有用:),不是一个正确的解决方案,但水平GridView(LeanBack Library)问题仍然存在
  • @Rakesh 布局的 xml 在哪里?

标签: android horizontal-scrolling android-recyclerview


【解决方案1】:

感谢您的帮助。在我的 Volley 库的 NetworkImageView 的情况下,通过将预定义的宽度和高度各 100 dp 分配给子视图,问题得到部分解决。而不是提供包装内容或匹配父项,而是提供预定义的宽度和高度对我有用:),不是正确的解决方案,但水平GridView(LeanBack Library)问题仍然存在

【讨论】:

    【解决方案2】:

    试试这个

    适配器

    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);
            }
        }
    }
    

    活动中

    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);
    

    【讨论】:

      【解决方案3】:

      尝试像这样使用layoutManager,可能对你有帮助

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

      【讨论】:

        【解决方案4】:

        请试试这个

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

        在适配器中

         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);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-07
          • 2021-06-08
          • 1970-01-01
          • 1970-01-01
          • 2017-11-30
          • 1970-01-01
          相关资源
          最近更新 更多