【问题标题】:Display items on recyclerview according to condition根据条件在recyclerview上显示项目
【发布时间】:2019-04-08 14:33:01
【问题描述】:

我正在向我的移动应用程序添加聊天功能。它有两个选项卡:聊天和用户。但是,在“用户”选项卡中,我只想显示作为数据库管理员的用户。下面是我的 UserNormal 和 ReadUsers 代码。请帮忙。谢谢!

ScreenShot

数据库结构:

UsersFragment

public class UsersFragmentTwo extends Fragment {

private RecyclerView recyclerView;

private UserAdapter userAdapter;
private List<UserNormal> mUsers;

EditText search_users;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_users, container, false);

    recyclerView = view.findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

    mUsers = new ArrayList<>();

    readUsers();
   }

读取用户代码:

    private void readUsers() {

    final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");

    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (search_users.getText().toString().equals("")) {
                mUsers.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    UserNormal user = snapshot.getValue(UserNormal.class);

                    if (!user.getId().equals(firebaseUser.getUid())) {
                        mUsers.add(user);
                    }

                }

                userAdapter = new UserAdapter(getContext(), mUsers, false);
                recyclerView.setAdapter(userAdapter);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

普通用户

public class UserNormal {

private String id;
private String username;
private String imageURL;
private String status;
private String search;
private String isAdmin;
private String email;
private String firstName;
private String lastName;



public UserNormal(String id, String username, String imageURL, String status, String search, String email) {
    this.id = id;
    this.email = email;
    this.username = username;
    this.imageURL = imageURL;
    this.status = status;
    this.search = search;
    this.firstName = firstName;
    this.lastName = lastName;
    isAdmin =  "false";
}

public UserNormal() {

}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getIsAdmin() {
    return isAdmin;
}

public void setIsAdmin(String isAdmin) {
    this.isAdmin = isAdmin;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getImageURL() {
    return imageURL;
}

public void setImageURL(String imageURL) {
    this.imageURL = imageURL;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getSearch() {
    return search;
}

public void setSearch(String search) {
    this.search = search;
}
}

【问题讨论】:

  • 你能链接你的adpater代码吗,因为那是逻辑所在?
  • @Amine 我认为问题更多在于 if (!user.getId().equals(firebaseUser.getUid())) { mUsers.add(user); }
  • 有什么问题?
  • @AlexMamo 问题是如何在 Firebase 中显示所有带有孩子 isAdmin=true 的用户。到目前为止,我正在使用数组列表显示所有用户,但我想要的是在 Firebase 中显示 isAdmin=true 的用户
  • 所以为了更好地理解,您想查询所有 isAdmin 为 true 的用户,对吧?

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


【解决方案1】:

尝试查询

private void readUsers() {

    final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    Query qry = FirebaseDatabase.getInstance().getReference("Users").orderByChild("isAdmin").equalTo("true");

    qry.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (search_users.getText().toString().equals("")) {
                mUsers.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    UserNormal user = snapshot.getValue(UserNormal.class);

                    if (!user.getId().equals(firebaseUser.getUid())) {
                        mUsers.add(user);
                    }

                }

                userAdapter = new UserAdapter(getContext(), mUsers, false);
                recyclerView.setAdapter(userAdapter);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

【讨论】:

  • 我也知道。可悲的是,我正在寻找一个代码,因为我对它有点陌生,这很明显。谢谢顺便说一句:)
  • 哦,好的。在这种情况下,请分享您的UserNormal 课程。
  • 查看我编辑的答案。我希望这是你所期望的。
  • 很遗憾它不起作用。仍然显示所有用户无论是管理员还是非管理员
  • 您确定不是所有用户都有 isAdmin = "true" 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 2021-05-21
  • 2020-09-24
  • 2019-05-25
  • 2021-12-20
  • 1970-01-01
相关资源
最近更新 更多