3

私は、Androidのページングライブラリ(https://developer.android.com/topic/libraries/architecture/paging.html)でページングを使用してrecyclerviewを実装しました。これは、データを取得し、後続のページを取得する上で正常に動作します。しかし、PagedListをフィルタリングする方法は?検索ウィジェットがあり、現在画面上のリストを検索したいとします。 PagedList.filter()Listを返し、PagedListAdapter.setList()Listを受け付けません。PagedListをフィルタリングできませんでしたか?

+0

こんにちはジャッキー、私のコードをご覧ください、それが助けてくれることを願います。ご不明な点がございましたら、私の答えの下にコメントを追加してください。私は手伝っています。ありがとう。 –

+0

[PagedListはリストです](https://developer.android.com/reference/android/arch/paging/PagedList.html)。 – kalabalik

答えて

-1

次のコードを試してください。APIからロードされたArrayList内を検索するために役立つことを願っています。理解を深めるためにたくさんのコードを追加しました。

//Component Casting 
SearchView search_channel = (SearchView) rootView.findViewById(R.id.search_channel); 

//Component Interface 
search_channel.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String mSearchText) { 
       if (mSearchText.length() > 2) { 
        search_channel.clearFocus(); 
       } 
       return true; 
      } 

      @Override 
      public boolean onQueryTextChange(String searchString) { 
        if (mAdapter != null) { 
         mAdapter.getFilter().filter(searchString); 
        } 
       return true; 
      } 
     }); 



// Filter inside Adapter class 
    @Override 
       public Filter getFilter() { 
        return new Filter() { 
         @Override 
         protected FilterResults performFiltering(CharSequence charSequence) { 
          List<ChannelsData> filteredResult = getFilteredResults(charSequence); 

          FilterResults results = new FilterResults(); 
          results.values = filteredResult; 
          results.count = filteredResult.size(); 
          return results; 
         } 

         @Override 
         protected void publishResults(CharSequence charSequence, FilterResults filterResults) { 
          mChannelsList = (ArrayList<ChannelsData>) filterResults.values; 
          mAdapter.notifyDataSetChanged(); 
          } 

         private List<ChannelsData> getFilteredResults(CharSequence constraint) { 
          if (constraint.length() == 0) { 
           return mChannelsListTemp; 
          } 
          List<ChannelsData> listResult = new ArrayList<ChannelsData>(); 
          for (ChannelsData obj : mChannelsListTemp) { 
           if (obj.getStr_channelName().toLowerCase().trim().contains(constraint.toString().toLowerCase().trim())) { 
            listResult.add(obj); 
           } 
          } 
          return listResult; 
         } 
        }; 
       } 
+0

これは通常のList Adapter riteの場合ですか?私はPagedListAdapter(https://developer.android.com/topic/libraries/architecture/paging.html)を使用していますが、Filterableの実装でも、元のリストは変更できません。 –

+0

@JackyCoolheart私は私の答えはあなたを助けるかもしれないと思った。私は知っているかもしれません、あなたはこの問題を解決してください。将来の参考に役立ちます。どうもありがとう。ハッピーコーディング。 –

関連する問題