2

私は暗号化通貨を監視しているファイリングベースのUIを使用していますが、アダプタをアップデートしようとするまでFirebase UIを使用していて、すべてうまくいきました(Firebase doesntサポートクライアント側フィルタリング) 「検索」機能が追加されました。私は更新された値を取得していますが、私のデータは以前のリサイクルビューのリストの下に移動します(どちらが目に見えなくなりますが、スペースが必要です)。私はある種の "clear recyclerview"機能が不足していると思う。 BTW。私はこれを断片で使用しています。助けてください。Firebaseを更新するRecyclerviewAdapterは前のリストを削除しません

ありがとうございます。

mRecyclerView.setHasFixedSize(true); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity())); 


    @Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 

    inflater.inflate(R.menu.menu,menu); 
    MenuItem item = menu.findItem(R.id.action_search); 

    SearchView searchView = (SearchView)item.getActionView(); 

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 

      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      Log.i(TAG,newText); 

      Query ref1 = FirebaseRef.getDatabase().child("Coins"); 

      mAdapter = new FirebaseRecyclerAdapter<Coins, CoinsViewHolder>(Coins.class, R.layout.coins_card, CoinsViewHolder.class, 
        ref1.orderByChild("short").startAt(newText).endAt("~").limitToFirst(3)) { 
       @Override 
       public void populateViewHolder(CoinsViewHolder coinsViewHolder, Coins coinsData, int position) { 

        if(coinsData.getName() != null){ 
         coinsViewHolder.setmNameTextView(coinsData.getName()); 

        } 

        if(coinsData.getPrice() != null) { 
         coinsViewHolder.setmPriceTextView(coinsData.getPrice()); 
        } else if(coinsData.getCap24hrChange() != null){ 
         coinsViewHolder.setmPercentChangeTextView(coinsData.getCap24hrChange());} 

        coinsViewHolder.bind(coinsData); 

       } 
      }; 

      mRecyclerView.addItemDecoration(new MaterialViewPagerHeaderDecorator()); 
      mRecyclerView.setAdapter(mAdapter); 
      MaterialViewPagerHelper.registerRecyclerView(getActivity(), mRecyclerView); 


      return true; 
     } 
    }); 

    super.onCreateOptionsMenu(menu,inflater); 
} 

enter image description here

enter image description here

答えて

0

あなたは、アダプタにテキストが追加されるたびに設定されています。 oncreateでアダプタ初期化を移動し、テキスト変更時にfirebaseクエリのみを更新します。

データベースからリサイクラビューに新しいデータのみを読み込み、アダプタのデータを保持するリストをクリアしてから新しいデータを追加し、notify dataset changedを呼び出します。

+0

お返事ありがとうございましたが、OnCreateにある間にonCreateOptionsMenuからクエリを更新する方法を共有できますか? :) –

+1

あなたのユースケースでは、FirebaseUIリサイクラアダプタを直接使用することはできません。なぜなら、クエリを継続的に変更する必要があるため、独自のリサイクラアダプタを使用する必要があるからです。 UIアダプターは、リサーチ担当者 –

+0

で公開されている変更点をチャットアプリなどのユースケースに適しています。パブリックリファレンスインスタンスを作成してアダプタをonCreateに移動しましたが、ref1値を変更するとアダプタは変更されません。だからFirebaseのアダプターを使うのをやめなければならないのですか? :/ –

関連する問題