不要将对象添加到 recyclerview

Posted

技术标签:

【中文标题】不要将对象添加到 recyclerview【英文标题】:Do not add an object to the recyclerview 【发布时间】:2021-07-06 20:47:40 【问题描述】:

我需要使用 textField 提供的搜索参数填充回收站视图。

这个 recyclerview 由我的应用程序的所有用户组成,但我不应该在那里,因为我无法搜索自己。

我使用 firestore 和 FirebaseUI 来填充回收器视图,并使用文本字段中写入的每个字母填充回收器视图我使用此方法:

 searchParameter.observe(getViewLifecycleOwner(), s -> 

            Query query = Firestore.COLLECTION_REFERENCE_USER
                    .orderBy("username")
                    .startAt(s).endAt(s + "\uf8ff");

            //RecyclerOptions
            FirestoreRecyclerOptions<UserModel> options = new FirestoreRecyclerOptions.Builder<UserModel>()
                    .setQuery(query, UserModel.class)
                    .build();

            adapter.updateOptions(options);

        );

我的应用程序中的用户名没有唯一性,但具有唯一性的是用户的电子邮件,因此我的第一个解决方案是添加一个参数以被视为与此查询不同,如下所示:

 Query query = Firestore.COLLECTION_REFERENCE_ISCRITTO
                    .orderBy("username")
                    .startAt(s).endAt(s + "\uf8ff")
.whhereNotEqualTo(Firestore.KEY_EMAIL, user.getEmail());

这不起作用,因为我按用户名对结果进行排序,所以我想,如果我无法解决查询中的问题,我可以在适配器的 onbindViewHolder 方法中解决它。

问题 它存在,如果存在,在验证要插入的项目是我的电子邮件的项目后,避免通过 onBindViewHolder 插入此项目的好策略是什么?

【问题讨论】:

您需要对数据进行什么样的过滤,请您详细说明一下? 在 onBindViewHolder if(uid.equals(id)) RecyclerView.LayoutParams param = (RecyclerView.LayoutParams)holder.itemView.getLayoutParams(); param.height = 0; param.width = LinearLayout.LayoutParams.MATCH_PARENT; holder.itemView.setVisibility(View.VISIBLE); else 中使用这个我几天前在这里找到了这个。我还没有测试过,但看起来很有希望。 @MalikBilal 非常好,谢谢它的工作原理! That's 为什么该查询不起作用。 【参考方案1】:

根据 cmets,OP 确认解决方案是在 BindViewHolder 上使用以下内容:

if(uid.equals(id))
    RecyclerView.LayoutParams param = (RecyclerView.LayoutParams)holder.itemView.getLayoutParams();
    param.height = 0;
    param.width = LinearLayout.LayoutParams.MATCH_PARENT;
    holder.itemView.setVisibility(View.VISIBLE);
 
else 

【讨论】:

以上是关于不要将对象添加到 recyclerview的主要内容,如果未能解决你的问题,请参考以下文章

将喜欢和页面访问计数添加到 Django 项目

将文件添加到存档时不要修改文件的编辑日期

不要将css添加到带有活动类的链接中[重复]

将每个字母定位到每个答案容器,但不要添加新的答案容器 - 使用 AngularJs 拖放

更新 RestKit:loadObjectsAtResourcePath:usingBlock:不要将对象保存在缓存中

将图像添加到 Core Data 需要很长时间