Запрос фильтра для заполнения FirebaseRecyclerAdapter

До сих пор неясно, как заполнить FirebaseRecyclerAdapter пользовательским запросом.

  1. Определите ссылку. Здесь: DatabaseReference ref = mDatabase.getReference().child("users");

  2. Отправьте его адаптеру initAdapter(ref);

  3. Определите запрос и установите прослушиватель. Это правильно?

    mAdapter = new FirebaseRecyclerAdapter<User, UserHolder>(User.class,  R.layout.user_row_layout, UserHolder.class, ref) {
    
            @Override
            protected void populateViewHolder(final UserHolder viewHolder, final User model, int position) {
    
                Query query = ref.orderByChild("group").equalTo(uid);
                query.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                        viewHolder.setName(model.getName());
                        viewHolder.setStatus(getStatus(model.getStatus()));
                    }
    
                    // ...
                };
    

Все еще показывает все данные от пользователей. Нужно просто фильтровать на основе uid. Любые подсказки?


person saintPeter    schedule 11.01.2017    source источник
comment
Судя по тому, как вы строите свой адаптер, вы, кажется, показываете список пользователей. Почему вы подключаете еще один дочерний прослушиватель в populateViewHolder?   -  person Frank van Puffelen    schedule 12.01.2017


Ответы (2)


Для тех, кто, возможно, пытался сделать вещи слишком сложными, как я, или работать по ночам, вот решение:

mAdapter = new FirebaseRecyclerAdapter<User, UserHolder>(
               User.class,  
               R.layout.user_row_layout, 
               UserHolder.class,
               ref.orderByChild("group").equalTo(uid)
) {
    @Override
    protected void populateViewHolder(final UserHolder viewHolder, final User model, int position) {

                viewHolder.setName(model.getName());
                viewHolder.setStatus(getStatus(model.getStatus()));
            }

            // ...
        };

Чао!

person saintPeter    schedule 12.01.2017

Простой пример, где я показываю ранговый список со всеми пользователями:

FirebaseRecyclerAdapter<UserData,RankListViewHolder> adapter = new FirebaseRecyclerAdapter<UserData, RankListViewHolder>
                (
           UserData.class,
           R.layout.rank_item,
           RankListViewHolder.class,
           userRef.child("users").getRef() //--Set here your query
                )
        {
            @Override
protected void populateViewHolder(RankListViewHolder viewHolder, UserData model, int position)
            {
                viewHolder.tvPos.setText(""+position+"º");
                viewHolder.userId = model.getId();
            }
        };
person Diego Venâncio    schedule 12.07.2017