簡體   English   中英

回收站查看多個搜索

[英]Recycler view multiple search

目前,我只能搜索一個字符串詞。 例如,我需要搜索多個我鍵入“ nougat,donut”的單詞,它們向我展示了這兩個單詞? 我需要輸入代碼才能使其正常工作?

數據適配器

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> implements Filterable {
private ArrayList<AndroidVersion> mArrayList;
private ArrayList<AndroidVersion> mFilteredList;

public DataAdapter(ArrayList<AndroidVersion> arrayList) {
    mArrayList = arrayList;
    mFilteredList = arrayList;
}

@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {

    viewHolder.tv_name.setText(mFilteredList.get(i).getName());
    viewHolder.tv_version.setText(mFilteredList.get(i).getVer());
    viewHolder.tv_api_level.setText(mFilteredList.get(i).getApi());
}

@Override
public int getItemCount() {
    return mFilteredList.size();
}

@Override
public Filter getFilter() {

    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {

            String charString = charSequence.toString();

            if (charString.isEmpty()) {

                mFilteredList = mArrayList;
            } else {

                ArrayList<AndroidVersion> filteredList = new ArrayList<>();

                for (AndroidVersion androidVersion : mArrayList) {

                    if (androidVersion.getApi().toLowerCase().contains(charString) || androidVersion.getName().toLowerCase().contains(charString) || androidVersion.getVer().toLowerCase().contains(charString)) {

                        filteredList.add(androidVersion);
                    }
                }

                mFilteredList = filteredList;
            }

            FilterResults filterResults = new FilterResults();
            filterResults.values = mFilteredList;
            return filterResults;
        }

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

public class ViewHolder extends RecyclerView.ViewHolder{
    private TextView tv_name,tv_version,tv_api_level;
    public ViewHolder(View view) {
        super(view);

        tv_name = (TextView)view.findViewById(R.id.tv_name);
        tv_version = (TextView)view.findViewById(R.id.tv_version);
        tv_api_level = (TextView)view.findViewById(R.id.tv_api_level);

    }
}

json回收器視圖

這是搜索,但僅需一個字

你可以試試這個

  if (charString.contains(",")) {
  String searchChar[] = charString.split(",");
  for (int i = 0; i < searchChar.length; i++) {

    if (androidVersion.getApi().toLowerCase().contains(searchChar[i]) || androidVersion
        .getName()
        .toLowerCase().contains(searchChar[i]) || androidVersion.getVer().toLowerCase()
        .contains(searchChar[i])) {

      filteredList.add(androidVersion);
    }
  }
} else {
  if (androidVersion.getApi().toLowerCase().contains(charString) || androidVersion.getName()
      .toLowerCase().contains(charString) || androidVersion.getVer().toLowerCase()
      .contains(charString)) {

    filteredList.add(androidVersion);
  }
}

替換代碼:

   if (androidVersion.getApi().toLowerCase().contains(charString) ||
    androidVersion.getName().toLowerCase().contains(charString) ||
    androidVersion.getVer().toLowerCase().contains(charString)) {

    filteredList.add(androidVersion);
   }

您需要添加一些預處理以確定是否存在多個值

 @Override
    protected FilterResults performFiltering(CharSequence charSequence) {
        String splitter = ",";
        final String[] multipleValues = charSequence.toString().split(splitter);
        //your null check
        List<AndroidVersions> filteredList = new ArrayList()
        for (String value : multipleValues) {
            filteredList.addAll(internalFilter(mArrayList, value));
        }
        //the rest of your code
    }

    private List<AndroidVersions> internalFilter(ArrayList<AndroidVersions> listToFilter, String value) {
        List<AndroidVersions> filteredList = new ArrayList()
        for (AndroidVersion androidVersion : listToFilter) {
            if (androidVersion.getApi().toLowerCase().contains(value)
                || androidVersion.getName().toLowerCase().contains(value)
                || androidVersion.getVer().toLowerCase().contains(value)) {

                filteredList.add(androidVersion);
            }
        }
        return filteredList;
    }

只需1個值,此代碼也可以正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM