【问题标题】:Filter query to populate FirebaseRecyclerAdapter过滤查询以填充 FirebaseRecyclerAdapter
【发布时间】:2017-05-26 22:25:05
【问题描述】:

目前还不清楚如何使用自定义查询填充 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 进行过滤。有什么线索吗?

【问题讨论】:

  • 通过构建适配器的方式,您似乎正在显示用户列表。为什么要在 populateViewHolder 中附加另一个子侦听器?

标签: android firebase firebase-realtime-database firebaseui


【解决方案1】:

对于那些可能像我一样试图让事情变得过于复杂,或者在晚上工作的人,这里有解决方案:

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()));
            }

            // ...
        };

赵!

【讨论】:

    【解决方案2】:

    一个简单的例子,我展示了一个包含所有用户的排名列表:

    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();
                }
            };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-20
      • 2018-06-10
      • 2016-07-22
      • 2018-07-18
      • 2018-08-01
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      相关资源
      最近更新 更多