【问题标题】:How do I add a horizontal RecyclerView inside a list item如何在列表项中添加水平 RecyclerView
【发布时间】:2015-05-07 06:44:26
【问题描述】:

实现的任务是我需要创建一个可以水平和垂直滚动的无限滚动列表。

为此,我正在尝试将水平的RecyclerView 集成到垂直的ListView 项目中。这是正确的方法吗?我尝试了其他解决方案,但滚动有一些问题。

问题是当我尝试在列表项中实现 RecyclerView 时,项目不会被填充。

public class HorizontalAdapter extends RecyclerView.Adapter<HorizontalAdapter.ViewHolder> {

List<ImageMedia> imageMedia;
protected Constants.IMAGE_SIZE image_size = Constants.IMAGE_SIZE.Small;
private Context context;


    public HorizontalAdapter(Context context) {
        super();
        setHasStableIds(true);
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        return new ViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.horizontal_item, viewGroup, false));
    }

    protected ImageMedia getItem(int position) {
        return imageMedia.get(position);
    }

    @Override
    public void onBindViewHolder(HorizontalAdapter.ViewHolder viewHolder, int i) {
        viewHolder.setMedia(getItem(i));
    }

    @Override
    public int getItemCount() {
        return (imageMedia != null ? imageMedia.size() : 0);
    }

    @Override
    public void onViewRecycled(ViewHolder holder) {
        super.onViewRecycled(holder);
    }

    @Override
    public long getItemId(int position) {
        return imageMedia.get(position).getId();
    }

    //Data gets updated here
    public void setMovies(List<Movie> movie) {

            if (movie != null) {
                imageMedia = (List<ImageMedia>) (List<?>) movie;
            } else {

            }
            notifyDataSetChanged();
    }


    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        ImageCardView imageView;
        ImageMedia imageMedia;

        public ViewHolder(View itemView) {
            super(itemView);

            imageView = (ImageCardView) itemView.findViewById(R.id.imageView);
            //TODO: remove this onclick

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Intent to go to the corresponding activity
                }
            });
        }

        public void setMedia(ImageMedia imageMedia) {
            this.imageMedia = imageMedia;

            imageView.loadImage(imageMedia, image_size);

        }
    }
}

【问题讨论】:

  • 只使用 RecyclerView,不使用 ListView
  • 您可以在 Scrollview 中动态添加水平 srcollview,而不是使用带有水平滚动视图的 Listview 作为列表项。试试这个链接
  • @pskink : 你的意思是我使用 RecyclerView(Horizo​​ntal) 的 recylerView(Vertical) ...??
  • 我认为您面临同样的问题。尝试硬编码你的水平RecycleView 的高度(即给它一个 300dp 的高度等)。这对你也有用吗?

标签: android listview android-recyclerview


【解决方案1】:

据我了解,问题出现在系统测量列表项时。

快速解决方法是给水平的RecyclerView 一个硬编码的高度,但由于这不是一个好方法,我继续寻找并找到了另一种方法。

This answer 很有帮助,我使用了那里发布的库。

按照以下步骤操作:

  1. 通过将其添加到您的 gradle 文件来导入库:

    compile 'org.solovyev.android.views:linear-layout-manager:0.5@aar'
    
  2. 如下设置LayoutManager

    mRecyclerView.setLayoutManager(new org.solovyev.android.views.llm.LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));`
    
  3. 确保水平方向RecyclerView 中膨胀的视图是RelativeLayout,因为其他LinearLayout 不支持这一点。
  4. 运行您的项目,见证奇迹!

【讨论】:

  • 我想问一下,这个布局管理器是给孩子的还是父母的?
  • mRecyclerView 是嵌套的RecyclerView
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
相关资源
最近更新 更多