当前位置: 首页 > 知识库问答 >
问题:

如何在不使用第三方库的情况下使recyclerview可扩展

益智明
2023-03-14

我想创建一个项目列表使用回收人员视图,并想展开特定项目时点击(如在电话呼叫列表)。我想实现这一点,而不使用任何库。有人能帮忙吗?

共有1个答案

鲁宏爽
2023-03-14

获取子数据列表作为数据集中父数据的成员。在RecyclerView行的点击事件中,像这样使用它们。。这里mdataSet是RecyclerView的主要数据集

final TitleHolder holder = (TitleHolder) h;
        final Model model = (Model) mdataSet.get(position);

        holder.txt_title.setText(model.getTitle());
        holder.childItem = model;

        holder.txt_title.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (model.getChildList() == null) {
                    //collapse
                    ((Model) mdataSet.get(mdataSet.indexOf(holder.childItem))).isExpanded = false;
                    holder.arrow.startAnimation(AnimationUtils.loadAnimation(context, R.anim.arrow_reverse));
                    model.childList = new ArrayList<ModelData>();
                    int count = 0;
                    int pos = mdataSet.indexOf(holder.childItem);
                    while (mdataSet.size() > pos + 1 && mdataSet.get(pos + 1).type == Model.VIEW_CHILD) {
                        model.childList.add((ModelData) mdataSet.remove(pos + 1));
                        count++;
                    }
                    notifyItemRangeRemoved(pos + 1, count);
                } else {
                    //expand
                    ((Model) mdataSet.get(mdataSet.indexOf(holder.childItem))).isExpanded = true;
                    holder.arrow.startAnimation(AnimationUtils.loadAnimation(context, R.anim.arrow));
                    int pos = mdataSet.indexOf(holder.childItem);
                    int index = pos + 1;
                    for (ModelData i : model.getChildList()) {
                        mdataSet.add(index, i);
                        index++;
                    }
                    notifyItemRangeInserted(pos + 1, index - pos - 1);
                    model.childList = null;

                }

            }
        });

        if (((Model) mdataSet.get(mdataSet.indexOf(holder.childItem))).isExpanded) {
            holder.arrow.startAnimation(AnimationUtils.loadAnimation(context, R.anim.arrow));
        }

在这里,我将再次在点击txt_title的事件中将子数据添加到主数据集,使用title(父)data(子)作为两种不同的视图类型,如下所示

@Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        if (viewType == VIEW_TITLE) {
            View itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.list_expand_title, parent, false);
            return new TitleHolder(itemView);
        } else {
            View itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.row_wallet_history, parent, false);
            return new DataHolder(itemView);
        }
    }

如果你的子视图被修复(你想展开/折叠),然后将它们包装在布局中,并使布局可见/消失动画,以实现展开折叠效果请参考此链接使它们动画

 类似资料:
  • 问题内容: 在我的一个应用程序中,我使用下面的代码片段将上传的图像复制到目录中。它可以正常工作,但是复制大图像(> 2MB)会花费比理想时间更多的时间,而且我真的不需要这么大的图像,因此,我正在寻找一种调整图像大小的方法。如何使用PHP实现呢? 问题答案: 最后,我发现了一种适合我需求的方法。以下代码段会将图像调整为指定的宽度,并自动计算高度以保持比例。 对于寻求完整示例的其他任何人,请创建两个文

  • 问题内容: 如何在 不使用第三方库的情况下使用 Node.js下载文件? 我不需要什么特别的东西。我只想从给定的URL下载文件,然后将其保存到给定的目录。 问题答案: 您可以创建一个HTTP 请求并将其通过管道传递到可写文件流中: 如果要支持在命令行上收集信息(例如指定目标文件或目录或URL),请查看Commander之类的内容。

  • 问题内容: 我想知道是否可以在没有支持库的情况下使用FragmentStatePagerAdapter类或其等效类? 我知道如何使用本机片段代替支持库中的本机片段,许多其他类也具有类似的等效项,但是我找不到代替该类的内容。 我基本上想扩展它以便在我的适配器中使用,就像这样 问题答案: 我想您已经阅读了 docs,但以防万一: 该课程目前正在早期设计和开发中。该API可能会在以后的兼容性库更新中更改

  • 问题内容: 如何在不使用NetBeans等IDE的情况下在Java程序中导入库?在Netbeans中,我这样做:在此处输入图片说明 仅使用记事本++或程序员的记事本,我怎么能达到相同的目的。我不想使用Netbeans,因为 我只从事简单的项目,所以这可能会过分杀人。 问题答案: javac -classpath external.jar myClass.java 编辑: 如果您的主要班级在包裹中

  • 问题内容: 我正在开发一个网站,用户使用ajax,php和POST方法提交凭据,我想保护登录凭据的格式不是纯文本,但我不想使用SSL我可以在不使用SSL证书的情况下保护密码凭据吗? 谁能给我任何方法的工作示例? 问题答案: 没有一些通道外验证(SSL提供),您将无法完全保护凭据。一个在中间攻击的人永远是可能的。 简而言之,客户端无法完全确定他们正在与服务器通信,而不是在两者之间插入假服务器。

  • 我遵循了本页中第一个可能的解决方案:检查kubernetes pod CPU和内存 我试过命令: Kubectl执行pod_name-- /bin/bash 但是它不起作用,因此我尝试了这个命令: kubectl exec-n[namespace][pod_name]--目录测试.log 我知道这一点,因为当我运行该命令时: kubectl获取pods--所有名称空间|grep[pod_name]