如何在 recyclerview 适配器中将动态视图添加到 android 布局

Posted

技术标签:

【中文标题】如何在 recyclerview 适配器中将动态视图添加到 android 布局【英文标题】:How to add dynamic views to android layout in recyclerview adapter 【发布时间】:2022-01-13 10:34:35 【问题描述】:

enter image description here

我有一个父母名单,每个父母都有零个或多个孩子 我使用 recyclerview 向父母展示。 我想将父母显示为每个 recyclerview 项目的标题,下面显示所有孩子 向孩子们展示的最佳方式是什么? 是否适合在列表视图中显示孩子或为每个孩子添加动态视图如果是这样怎么做? 我附上了布局的图片,请检查我的意思 谢谢

enter image description here

【问题讨论】:

提出一些有问题的代码,尤其是适配器和相关的 XML,并准确描述您的问题,您想展示什么,到目前为止您已经尝试过什么 您能否添加适当的描述,因为您的问题描述不足以理解您想要什么? 请点击图片链接看看我的意思 【参考方案1】:

我想,这对 bcz 有帮助吗,在每个位置都有可敬的动态生成项目视图。

                LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
                linearLayoutManager.setOrientation(RecyclerView.HORIZONTAL);
                IAFTbind.rcvFilters.setLayoutManager(linearLayoutManager);
                IAFTbind.rcvFilters.setAdapter(new RecyclerView.Adapter() 
                    public int checkedPosition = 0;


                    @NonNull
                    @Override
                    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
                        ImageView imageView = new ImageView(getContext());
                        imageView.setScaleX(.9f);
                        imageView.setScaleY(.9f);
                        imageView.setLayoutParams(new ViewGroup.LayoutParams(size, size));
                        return new RecyclerView.ViewHolder(imageView) 
                            @Override
                            public String toString() 
                                return super.toString();
                            
                        ;
                    

                    @Override
                    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) 
                        int p = holder.getAdapterPosition();

                        ((ImageView) holder.itemView).setBackground(new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(fBits.get(p), size, size, false)));

//                        ((ImageView) holder.itemView).setBackground(new BitmapDrawable(getResources(), bitmaps.get(position)));

                        int cp = this.checkedPosition;

                        if (cp == -1) 
                            ((ImageView) holder.itemView).setImageResource(0);
                         else if (cp == p) 
                            ((ImageView) holder.itemView).setImageResource(R.drawable.draw_tool_selecter_strock);
                         else 
                            ((ImageView) holder.itemView).setImageResource(0);
                        


                        holder.itemView.setOnClickListener(new View.OnClickListener() 
                            @Override
                            public void onClick(View v) 
                                ((ImageView) holder.itemView).setImageResource(R.drawable.draw_tool_selecter_strock);
                                checkedPosition = p;
                                notifyDataSetChanged();

                                changeBitmapEffect(p);
                            
                        );
                    

                    @Override
                    public int getItemCount() 
                        return fBits.size();
                    

                );

【讨论】:

【参考方案2】:

问题陈述

您希望根据共享的屏幕截图动态添加子项。

解决方案

所以在这里我可以看到 2 个回收站视图,一个在另一个内部。第一个回收站视图适用于拥有 2 个项目的父母

父母姓名 另一种面向儿童的回收站视图

您需要做的是,您需要将更新后的项目列表传递给父级的 recyclerview 适配器,该适配器会将更新后的项目列表发送到子级 recyclerview 适配器,而子级 recyclerview 适配器将使用 diffUtil 检查任何更改它会反映recyclerview中的变化。

【讨论】:

以上是关于如何在 recyclerview 适配器中将动态视图添加到 android 布局的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 recyclerview 适配器中将 API 日期转换为 Kotlin 中的字符串?

用户交互后如何根据 RecyclerView 适配器内部服务器的响应更新 TextView?

如何动态地将列表项添加到recyclerView?

使用动态Edittext的RecyclerView

RecyclerView动态添加删除及点击事件

如果为空,如何隐藏 Firestore RecyclerView