如何在垂直recyclerview android中实现Vertical Recyclerview?

Sni*_*per 5 android android-recyclerview

假设我有2 个项目,其中RecyclerView每个项目innerrecyclerview有大约100 个项目,它们都是垂直的或任何对现有问题没有任何影响的项目。

我已经在其他 stackoverflow 问题或其他 android 博客上实现了此处提供的方法,但没有帮助。

我有一个问题onbindviewholder,项目 1 内部RecyclerViewonbindviewholder所有元素(即 100 个)一次被调用,并且它们没有回收或任何东西,因为onbindviewholder没有通过滚动来调用,而这应该是正常行为RecyclerView

以及如何进行innerrecyclerview回收,因为所有其他帖子都没有谈到这一点。

CourseRVAdapter 或 ParentAdapter

public class CourseRVAdapter extends RecyclerView.Adapter<CourseRVAdapter.SimpleViewHolder> {

        private Context mContext;
        private List<data> merchantlist;
        private List<data> merchantlist2;
        private RecyclerView horizontalList;
        Typeface MRR;
        private Typeface MR;


        public class SimpleViewHolder extends RecyclerView.ViewHolder {
            public final TextView title;
            private HorizontalRVAdapter horizontalAdapter;

            public SimpleViewHolder(View view) {
                super(view);
                Context context = itemView.getContext();
                title = (TextView) view.findViewById(R.id.text_1);
                horizontalList = (RecyclerView) itemView.findViewById(R.id.my_recycler_view);
                horizontalList.setLayoutManager(new CustomLinearLayoutManager(mContext, 3));
                horizontalAdapter = new HorizontalRVAdapter(merchantlist, mContext, MR);
                horizontalList.setAdapter(horizontalAdapter);
            }
        }



        CourseRVAdapter(List<data> merchantlist2, Context mContext, Typeface MRR, List<data> merchantlist, Typeface MR) {

            this.merchantlist2 = merchantlist2;
            this.merchantlist = merchantlist;
            this.mContext = mContext;
            this.MRR = MRR;
            this.MR = MR;

        }
        public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            final View view = LayoutInflater.from(mContext).inflate(R.layout.merchant_list_header, parent, false);
            return new SimpleViewHolder(view);
        }

        @Override
        public void onBindViewHolder(SimpleViewHolder holder, final int position) {



        }

        @Override
        public int getItemCount() {

            return merchantlist2.size();
        }

    }
Run Code Online (Sandbox Code Playgroud)

水平RV适配器或内部适配器

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

            List<data> merchantlist;
            FragmentActivity main;
            Context mContext;
            Typeface MRR;

            public HorizontalRVAdapter(List<data> merchantlist, Context mContext, Typeface MRR) {

                this.merchantlist = merchantlist;
                this.mContext = mContext;
                this.MRR = MRR;

            }

            private class ItemViewHolder extends RecyclerView.ViewHolder {

                private TextView merchantname;

                public ItemViewHolder(View itemView) {
                    super(itemView);
                    merchantname = (TextView) itemView.findViewById(R.id.merchant_name);
                }
            }

            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                Context context = parent.getContext();
                View itemView = LayoutInflater.from(context).inflate(R.layout.merchant_list_item, parent, false);
                ItemViewHolder holder = new ItemViewHolder(itemView);
                return holder;
            }

            @Override
            public void onBindViewHolder(RecyclerView.ViewHolder rawHolder, int position) {

                ItemViewHolder holder = (ItemViewHolder) rawHolder;
                data list = merchantlist.get(position);
                holder.merchantname.setText(list.merchantname);
                holder.itemView.setTag(position);

                Log.d("TAG", "onbindviewholder -- > " + position);
            }

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

        }
Run Code Online (Sandbox Code Playgroud)

我没有添加如何填充两个recyclerview.

例如parentrecyclerview有 1 或 2 个项目,innerrecyclerview有 100 个项目。

编辑 :

因此,在收到第一条评论后,我正在更新我想要实现的目标以获得更好的回复。

我有一个两个文本视图和一个 Gridrecyclerview,我希望当我滚动 gridrecyclerview 时两个文本视图滚动。我想出了通过为这两个文本视图定义标题和为网格项目定义简单项目持有者来做到这一点的想法。

然后我必须使用跨度设置 Gridlayoutmanager,但它还包含前两个文本,最终我也在该网格中得到了两个文本视图,这是不需要的。 蓝色的是 oarentrecyclerview 的一项,图标和文本是 insiderecyclerview 的一项,我希望它们能够内聚滚动

Abb*_*bas 1

所以问题出RecyclerView在另一个 VERTICAL 内的VERTICAL RecyclerView。OP 的问题是onBindView()在滚动嵌套的项目时没有被调用RecyclerView

原因很简单:嵌套的 RecyclerView 正在绘制其所有 View,因为它具有来自其父级的无限可用空间RecyclerView


GridLayoutManager通过使用with span 查找(有关详细信息,请参阅此SO 答案), OP 解决了该问题,这消除了使用 Nested 的需要RecyclerView