android - 如何在vertical recyclerview android中实现Vertical Recyclerview?

标签 android android-recyclerview

假设我在 RecyclerView 中有 2 个项目,其中每个项目都有一个 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();
        }

    }

Horizo​​ntalRVAdapter 或 Inneradapter

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

        }

我还没有添加如何为 recyclerview 填充数据。

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

编辑:

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

我有两个 textview 和一个 Gridrecyclerview,当我滚动 gridrecyclerview 时,我希望这两个 textview 滚动。我想到了通过为这两个 TextView 定义标题和为网格项定义简单的项目持有者来实现这一点。

然后我不得不使用 span 设置 Gridlayoutmanager,但它也包含前两个文本,我最终在该网格中得到了两个 TextView ,这是不需要的。 The blue one is the one item of the oarentrecyclerview and the icon and text are the item for insiderecyclerview i want them to scroll in cohesion

最佳答案

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

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


通过使用带有跨度查找的 GridLayoutManager 解决了 OP 的问题(有关详细信息,请参阅 SO answer ),这消除了使用嵌套 RecyclerView 的需要.

关于android - 如何在vertical recyclerview android中实现Vertical Recyclerview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45876645/

相关文章:

android - 运行应用程序时我的 cardView 布局未显示

android - 根据List改变constraintlayout

android - 显示 Activity 并在加载其元素后

android - Recycler View 在滚动时随机播放图像

android - RecyclerView OnClick 通过 intent 长按添加标记到 map

android - 当显示键盘时,屏幕回收 View 上方的布局向上移动

java - 如何修复 'Horizontal swiping between ViewPager tabs' ?

java - 查看 Drag Helper 助手

android - 如何从自定义 View 更改 TextView 的文本?

Android 应用程序安装新的而不是更新