2016-08-22 3 views
3

FireChatアプリケーションから参照を取得しました。私のアプリケーションでFirebaseRecyclerAdapterを使用しましたが正常に動作していますが、特定のユーザIDに等しいデータをフィルタリングする必要があります。FirebaseRecyclerAdapterからビューにデータを入力する前にデータをフィルタリングする

populateViewではデータがフィルタリングされますが、空のリサイクルアイテムItemも作成されます。

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

オカイ@フランクありがとう、私はそれを得る。 Firebaseのクエリを使用したくない場合は、モデリングデータでどのように行うのか考えてもらえますか? –

+0

この場合、ユーザーごとにメッセージをモデル化できます。だから '/ messagesPerUser/$ uid/$ messageId'。 –

+0

ええ、私はあなたが探していたものを得ました、私はちょうどあなたが提案したものを実装しました。それは期待どおりに動作します、ありがとう@フランク。 –

関連する問題