1

私の問題を単純化するために、私はFirebusデータベースに "ビジネス"ノードがあり、ビジネスノードにはその特定のビジネスに関するIDと対応するデータを持つ子があります。私は自分の火災ベースのRecycler Viewにすべての事業を表示したくない、特定のもののみを表示する。私がいつでも見たいものについては、私はIDのリストを持っています。私はこのコードを実行した場合Firebase RecyclerViewには、特定のキーのリストと一致するキーを持つ項目のみを設定しますか?

... 

List<String> businessList = ("00002", "00004", "00021"); 

... 
private void setUpFirebaseAdapter() { 
    mFirebaseAdapter = new FirebaseRecyclerAdapter<User, FirebaseBusinessViewHolder> 
      (User.class, R.layout.business_list_item, FirebaseBusinessViewHolder.class, mBusinessReference{ 
     @Override 
       protected void populateViewHolder(FirebaseBusinessViewHolder viewHolder, User model, int position){ 

        for (String businessID : businessList) { 
         if (businessID.equals(model.getId())){ 
         //show this item 
          viewHolder.bindBusiness(model, true); 
         } 
         if(!businessID.equals(model.getId())){ 
          //don't show this item 
         } 
        } 
      } 

    }; 
    mRecyclerView.setHasFixedSize(true); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    mRecyclerView.setAdapter(mFirebaseAdapter); 
} 

は、それだけbusinessListからのデータが表示されますが、それが作成するとして、それはまた、そのID businessListではなかったデータベースに格納されている他の項目のための空きスペースを残し空のリスト項目はデータをバインドしません。私は明らかに不要なアイテムのためにギャップ/空きスペースを表示したくありません。リストアダプター/ビューホルダーを調整して、希望のアイテムのみを表示するにはどうすればよいですか?

答えて

1

高さを0またはsetting their visibility to goneに設定して、表示したくないアイテムを完全に非表示にすることができます。しかし、そのような場合は不要なデータをダウンロードしているので、恐ろしいクルージングのように聞こえます。あなたは(structure known as an index, similar to the one described in the Firebase documentationで)データベースに表示し、その後FirebaseIndexedRecyclerAdapterを使用したいアイテムの

  1. ストアキー:

    あなたはここに2つのオプションがあります。

  2. loads each individual item with a ValueEventListener as described in the Firebase documentation
0

独自のアダプタを作成します。あなたは、あなたのコード内で使用しているクエリ何投稿していなかったので、私はそれが/businesses下にあるものすべてのためだけDatabaseReferenceだと仮定しています。あなたがそれをしているなら、あなたはその場所のすべての子どものためにpopulateView()メソッドの呼び出しを得るでしょう。つまり、すべての子供にviewを作成するように求められます。あなたは、そのアイテムのビューが表示されるかどうかを選択する必要はありません。

if statementpopulateViewであると思われる場合は、businessListに属していない項目はスキップします。しかし、実際に何が起きているのかは、空のビューにリスト内のその場所を占めることだけです。

代わりに、あなたのリストに興味のある項目だけを生成するクエリを考え出すべきです。つまり、条件を満たす子供をフィルタリングするようFirebaseに指示する必要があります。これを実現するにはequalTo()メソッドを使用できます。

場所の全体の内容を読み取って、不要な項目を手動で除外し、必要な項目のリストを作成する別の方法です。そのリストでAdapterを構築すると、RecyclerViewへの入力になります。

希望します。

関連する問題