不要将对象添加到 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 插入此项目的好策略是什么?
【问题讨论】:
您需要对数据进行什么样的过滤,请您详细说明一下? 在 onBindViewHolderif(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的主要内容,如果未能解决你的问题,请参考以下文章
将每个字母定位到每个答案容器,但不要添加新的答案容器 - 使用 AngularJs 拖放