กรองการค้นหาเพื่อเติม 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