Android 验证在firebase回收器适配器中不起作用
我正在应用一个验证,在该验证中,我从数据库获取列表中的所有令牌,然后在onBindviewHolder Iam中应用Foreach循环,在该循环中,我将所有令牌与当前用户令牌匹配,如果令牌匹配,则该项视图不应显示在recyclerview中 我在这里得到了代币列表:Android 验证在firebase回收器适配器中不起作用,android,firebase,firebase-realtime-database,android-recyclerview,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我正在应用一个验证,在该验证中,我从数据库获取列表中的所有令牌,然后在onBindviewHolder Iam中应用Foreach循环,在该循环中,我将所有令牌与当前用户令牌匹配,如果令牌匹配,则该项视图不应显示在recyclerview中 我在这里得到了代币列表: for (DataSnapshot parent : dataSnapshot.getChildren()) { String token; token
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中显示任何内容。我想显示用户列表,但不符合条件的用户除外。如果我删除此检查!equalsuserId并删除循环它开始工作正常,但我也必须应用此验证
我正在获取这些节点,并且哪个节点与当前登录的用户节点匹配我不想显示他的详细信息。
这是我的全部功能,我在其中使用以下逻辑:
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);
通过在onBindViewHolder中更改逻辑,我得到了解决方案 我删除了foreach循环,并开始将userId与tokenlist位置匹配
您能展示您的数据库结构并详细说明您的需求,而不是要求用代码解决您的问题吗?这可能会很方便地解决问题,请将您的数据库结构添加为JSON文件或至少是屏幕截图,而不是您的方法。我已经更新了我的问题
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));
}