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

Android:嵌套回收视图的最佳实践链接到云fiRest

姜嘉赐
2023-03-14

我目前使用一个嵌套的RecyclerView和一个SQLite数据库。然而,我目前正在切换到firebase,使用Cloud Firestore作为数据库。

我的设置是:

  • Firestore数据库设置为:用户-
    DocumentSnapshot snapshot = getSnapshots().getSnapshot(verticalPosition);

    String roomId = snapshot.getId();
  • 对于Id,我正在排队等待水平数组列表(任务),该列表位于FiRest引用“房间”内:
if (currentUser != null) {
        String userID = currentUser.getUid();
        userRef = fdb.collection("users").document(userID);
        houseRef = userRef.collection("houses").document("house0");
        roomRef = houseRef.collection("rooms").document(roomId);

            roomRef.get().addOnCompleteListener(tasksnap -> {
                if (tasksnap.isSuccessful()) {
                    DocumentSnapshot document = tasksnap.getResult();
                    if (document.exists()) {

                        VerticalModel room = document.toObject(VerticalModel.class);
                        if (room != null) {
                            ArrayList<HorizontalModel> tasks = room.getArrayList();

                            hAdapter = new HorizontalRecyclerViewAdapter(context, new ArrayList<>(),
                                    verticalPosition, listener, cleanInter);
                            holder.view.rvHorizontal.setHasFixedSize(true);
                            holder.view.rvHorizontal.setLayoutManager(new LinearLayoutManager(context,
                                    LinearLayoutManager.HORIZONTAL, false));

                            holder.view.rvHorizontal.setAdapter(hAdapter);
                            holder.view.rvHorizontal.setNestedScrollingEnabled(false);

                            holder.updateContents(tasks, hAdapter);
                        }
                    }
                }
            });
        }

我将为一个任务切换到一个文档,而不是每个房间都有一个包含所有任务的数组列表。

然而,我正在经历许多Firestread调用,可能是因为onbind方法被调用了几次。

所以,如果有专家的话:有更好的方法吗?不幸的是,使用2个Firestore适配器对我不起作用。

也许可以强制firebase一直从本地缓存读取数据,并且只有当用户退出应用程序时,firebase才会更新更改?

共有1个答案

壤驷睿
2023-03-14

根据你的第一条评论:

读取次数,以及是否有更好的方法实现第二个rv

第二条评论:

免费用户只能添加5个房间,每个房间有5个任务。付费用户通常会增加大约8个房间,每个房间大约有10到20个任务。

我能想到的最简单的选择是在每个房间对象中使用一个数组类型字段,该字段可以容纳所有任务对象。由于它将只存在几个任务对象,因此可以轻松地将它们添加到单个文档中。这样一来,你只需支付一次读数就可以显示一个房间以及所有任务。

如果您想知道如何将自定义对象数组映射到列表中,请阅读以下文章:

  • 如何将Cloud Firestore中的一组对象映射到一组对象
 类似资料:
  • 我正在用PHP写作。 我想做的是像Magento2中的可配置产品或Woocommerce中的可变产品。我要求用户输入产品的属性,如颜色、大小等”。 将每个属性视为一个属性类别,其中包含属性,例如“颜色”将具有“红色”、“绿色”、“蓝色”等属性。大小将具有“大”、“小”、“中”等属性。 现在,我需要做一个循环,它接受所有大小、颜色和其他选定的属性,并返回所有可能的配置。同时,要循环的属性数量没有预定

  • 以公司的rest表示为例。在这个假设的例子中,每个公司拥有0个或更多的部门,每个部门拥有0个或更多的员工。 一个部门不能没有关联公司。 没有关联部门,员工就无法存在。 null 但是,如果我想列出()所有公司的所有员工,我的困难就来了。 其资源模式将最紧密地映射到(所有员工的集合) 这是否意味着我应该有,因为如果有的话,那么有两个URI可以获得相同的资源? 在基本级别上,返回与嵌套最深的模式完全相

  • 例如,对于基于spring的项目,有eureka config(eureka.properties)、zuul config(zuul.properties)、feign config(feign.properties)等。

  • 我有一些关于Firebase云功能最佳实践的问题,非常感谢您的任何见解和建议! 哪里是初始化管理SDK的最佳位置,因为你只能这样做一次,如果你在一个单独的文件中这样做,初始化你需要的服务(如Fi还原和函数)并导出它们,或者在根初始化管理SDK,index.ts? 如果您有与单个事件相关的多个任务,您应该触发多个云函数来处理同一事件的不同任务,还是为处理多个任务的事件触发一个云函数。例如,如果您有一

  • 问题内容: 我警告我。 然而,结构的嵌套是既定的编程技术,以及相当一些人在坚持它。 编辑:确实@vadian指出了Swift语言指南的规则: 要将类型嵌套在另一个类型中,请在其支持的类型的大括号内写入其定义。 类型可以嵌套到所需的多个级别 。 我知道它与泛型的使用发生冲突,并且Xcode可能会变得异常缓慢。实际上(通过测量最慢的编译点)是我开始研究此嵌套规则的原因。 实行皮棉规则的原因是什么?在这