2016-08-22 70 views
3

從FireChat應用程序引用我在應用程序中使用了FirebaseRecyclerAdapter,但它工作正常,但我需要過濾與特定用戶ID相同的數據。從FirebaseRecyclerAdapter填充視圖之前過濾數據

在populateView如果我這樣做的數據正在過濾,但空白的回收站項目項目也正在創建。

mFirebaseAdapter = new FirebaseRecyclerAdapter<Tags, TagsViewHolder>(
      Tags.class, 
      R.layout.item_message, 
      TagsViewHolder.class, 
      mFirebaseDatabaseReference.child("tags")) { 

     @Override 
     protected void populateViewHolder(TagsViewHolder viewHolder, Tags tags, int position) { 
      mProgressBar.setVisibility(ProgressBar.INVISIBLE); 
      if((tags.getUserid()).equals(mFirebaseUser.getUid())) 
      viewHolder.tagTextView.setText(tags.getTagname()); 
     } 
    }; 

有什麼辦法,我可以將其過濾視圖被創建之前?

我的POJO類是:

public class Tags { 
    private String userid; 
    private String tagname; 
    private HashMap<String, Object> timestampCreated; 

    public Tags() { 
    } 

    public Tags(String userid, String tagname, HashMap<String, Object> timestampCreated) { 
     this.userid = userid; 
     this.tagname = tagname; 
     this.timestampCreated = timestampCreated; 
    } 

    public String getUserid() { 
     return userid; 
    } 

    public String getTagname() { 
     return tagname; 
    } 

    public HashMap<String, Object> getTimestampCreated() { 
     return timestampCreated; 
    } 
} 

謝謝!

回答

2

客戶端過濾是針對FirebaseUI的開放功能請求。見https://github.com/firebase/FirebaseUI-Android/issues/15

客戶端過濾數據,意味着應用程序首先下載數據,然後不顯示給用戶。這非常浪費,如果您的應用只下載向他們展示的數據,那麼大多數移動應用的用戶都會很感激。

處理顯示數據子集的最佳方法是以某種方式對數據建模,以便您可以直接訪問要顯示的數據子集或使用Firebase queries to limit the data that is retrieved

+1

好的@Frank謝謝,我明白了。如果我不想使用Firebase查詢,那麼您是否可以提出一個想法,如何使用建模數據來實現? –

+0

在這種情況下,您可以建模每個用戶的消息。所以'/ messagesPerUser/$ uid/$ messageId'。 –

+0

是的,我得到了我正在尋找的東西,我剛剛實現了你的建議。它按預期工作,非常感謝@Frank。 –