【问题标题】:validation is not working in firebase recycler adapter验证在 firebase 回收器适配器中不起作用
【发布时间】:2020-02-19 09:37:26
【问题描述】:

我正在应用验证,其中我正在从数据库中获取列表中的所有令牌,然后在 onBindviewHolder 我正在应用 Foreach 循环,在该循环中,我正在将所有令牌与当前用户令牌匹配,并且令牌是否与该项目匹配视图不应显示在 recyclerview 中 我在这里获取令牌列表:

for (DataSnapshot parent : dataSnapshot.getChildren()) {
                    String token;
                    token = parent.getKey();
                    tokenList.add(token);
                }

并在这里显示列表:

 for (String tokens : tokenList) {

                    if (bloodGroupMatched.contains(bloodGroup) && !tokens.equals(userId)) {

                        holder.name.setText(profiles.getName());
                        holder.type.setText(userType);
                        holder.distance.setText(dist + " km");
                        holder.itemView.setVisibility(View.VISIBLE);
                        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        params.setMargins(10, 5, 5, 10);
                        holder.itemView.setLayoutParams(params);
                    } else {

                        holder.itemView.setVisibility(View.GONE);
                        holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));
                    }

                }

在显示列表时,如果我敬酒令牌,则循环不会结束,并且它会在列表结束时从头开始显示令牌,并且在 recyclerview 中不显示任何内容。我想显示用户列表,除了谁没有'不符合条件。如果我删除此检查“!tokens.equals(userId)”并删除循环它开始工作正常但我也必须应用此验证

我正在获取这些节点以及哪个节点与当前登录用户节点匹配我不想显示他的详细信息。 这是我使用这个逻辑的全部功能:

adapter = new FirebaseRecyclerAdapter<Profiles, DonarViewHolder>(model) {
            @Override
            protected void onBindViewHolder(@NonNull DonarViewHolder holder, int position, @NonNull Profiles profiles) {

                ArrayList<String> bloodGroupMatched = new ArrayList<>();
                bloodGroupMatched.addAll(profiles.getMatched_bloodGroups());

                for (String tokens : tokenList) {

                    if (bloodGroupMatched.contains(bloodGroup) && !tokens.equals(userId)) {

                        holder.name.setText(profiles.getName());
                        holder.itemView.setVisibility(View.VISIBLE);
                        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        params.setMargins(10, 5, 5, 10);
                        holder.itemView.setLayoutParams(params);
                    } else {

                        holder.itemView.setVisibility(View.GONE);
                        holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));
                    }
                }
            }

            @NonNull
            @Override
            public DonarViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_donar_view_holder, parent, false);
                return new DonarViewHolder(view);
            }
        };
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter.startListening();
        progressDialog.dismiss();
        recyclerView.setAdapter(adapter);

【问题讨论】:

  • 您能否展示您的数据库结构并详细说明您的需求,而不是要求在代码中解决您的问题?可能这会以方便的方式解决,而不是您的方法
  • 请将您的数据库结构添加为 JSON 文件或至少是屏幕截图。
  • 我已经更新了我的问题

标签: android firebase firebase-realtime-database android-recyclerview


【解决方案1】:

我通过更改 onBindViewHolder 中的逻辑得到了解决方案 我删除了 foreach 循环并开始将 userId 与 tokenlist 位置匹配

   ArrayList<String> bloodGroupMatched = new ArrayList<>();
        bloodGroupMatched.addAll(profiles.getMatched_bloodGroups());


        if (bloodGroupMatched.contains(bloodGroup) && !userId.equals(tokenList.get(position))){

            holder.name.setText(profiles.getName());
            holder.type.setText(userType);
            holder.distance.setText(dist + " km");
            holder.itemView.setVisibility(View.VISIBLE);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            params.setMargins(10, 5, 5, 10);
            holder.itemView.setLayoutParams(params);
        } else {

            holder.itemView.setVisibility(View.GONE);
            holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));
        }

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多