Как искать подстроку из двух разных строк в searchview
Я хочу найти две разные строки из разных столбцов в представлении поиска.Например, вместо "city state "я хочу найти" ci sta " и получить список полей, содержащих эти слова. спасибо
Что я уже пробовал:
public class ProviderRecyclerAdapter extends RecyclerView.Adapter<ProviderViewHolder> implements Filterable { private ArrayList<Provider_list> mDataset; private Context mContext; private ProviderFilter providerFilter; public ProviderRecyclerAdapter(ArrayList<Provider_list> dataset, Context context) { mDataset = dataset; mContext = context; } @Override public int getItemCount() { return mDataset.size(); } @Override public void onBindViewHolder(ProviderViewHolder holder, int position) { Provider_list n = mDataset.get(position); holder.mTitle.setText(n.getProvider_name()); holder.mCity.setText(n.getCity()); holder.mRegion.setText(n.getRegion()); holder.mAddress.setText(n.getAddress()); } @Override public ProviderViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.provider_layout, parent, false); return new ProviderViewHolder(view); } @Override public Filter getFilter() { if(providerFilter == null) providerFilter = new ProviderFilter(this, mDataset); return providerFilter; } private static class ProviderFilter extends Filter { private final ProviderRecyclerAdapter brandsAdapter; private final List<Provider_list> originalList; private final List<Provider_list> filteredList; private ProviderFilter(ProviderRecyclerAdapter brandsAdapter, List<Provider_list> originalList) { super(); this.brandsAdapter = brandsAdapter; this.originalList = new LinkedList<>(originalList); this.filteredList = new ArrayList<>(); } @Override protected FilterResults performFiltering(CharSequence constraint) { filteredList.clear(); final FilterResults results = new FilterResults(); if (constraint.length() == 0) { filteredList.addAll(originalList); } else { final String filterPattern = constraint.toString().toLowerCase().trim(); for (final Provider_list business : originalList) { if (business.getProvider_name().toLowerCase().contains(filterPattern)) { filteredList.add(business); } else if (business.getAddress().toLowerCase().contains(filterPattern)){ filteredList.add(business); } else if (business.getRegion().toLowerCase().contains(filterPattern)){ filteredList.add(business); } else if (business.getCity().toLowerCase().contains(filterPattern)){ filteredList.add(business); } else if ( business.getCity().toLowerCase().contains(filterPattern) && business.getProvider_name().toLowerCase().contains(filterPattern) ) { filteredList.add(business); } } } results.values = filteredList; results.count = filteredList.size(); return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { brandsAdapter.mDataset.clear(); brandsAdapter.mDataset.addAll((List<Provider_list>) results.values); brandsAdapter.notifyDataSetChanged(); } } }
David Crow
Так в чем же проблема? Подсказка: "это не работает" - это неправильный ответ.
Member 13053943
вы вообще читали вопрос? я хочу найти две неполные разные строки в строке поиска.когда я набираю пробел и другое слово, поиск не работает
David Crow
Да, я прочитал вопрос. Однако вы не упомянули, в чем проблема. В любом случае вам нужно будет изменить performFiltering(). Возьмите ограничение и разбейте его на подстроки (разделенные пробелом). Для каждой найденной подстроки найдите соответствующие поля в Provider_list.
Member 13053943
с кодом проблем нет.мне трудно делать тот тип поиска, который я хочу.как и при поиске "ci st", у меня должен быть список данных, содержащих that.my проблема заключается в пространстве между строками, которое я не могу добавить в код.если вы можете записать для меня несколько кодов, я буду вам очень признателен.спасибо