Поиск любого текста из arraylist - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над поиском, у меня есть одна строка, которую я добавил в arraylist, и в этой строке, если у меня есть слово для поиска, он отображает значения связанных слов, как в моем списке, есть одна запись типа «Вы разработчик», если я если вы искали, он показывает правильный результат, но если я искал, вы разработчик, он не может отображать результаты, так как решить эту проблему

это мой класс адаптера.

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.sonal.mindwerx.Item.SearchModel;
import com.sonal.mindwerx.R;
import com.sonal.mindwerx.SearchDisplay;

import java.util.ArrayList;
import java.util.List;


public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.MyViewHolder> implements Filterable {
    ArrayList<SearchModel> filterList;
    private List<SearchModel> searchlist;
    private Context context;


    public class MyViewHolder extends RecyclerView.ViewHolder {


        public TextView tv_name_search, tv_code_search;
        public LinearLayout ll_search_item;

        public MyViewHolder(View view) {
            super(view);

            tv_name_search = (TextView) view.findViewById(R.id.tv_name_search);
            tv_code_search = (TextView) view.findViewById(R.id.tv_code_search);
            ll_search_item = (LinearLayout) view.findViewById(R.id.ll_search_item);

        }
    }


    public SearchAdapter(Context context, ArrayList<SearchModel> searchlist) {
        this.context = context;
        this.searchlist = searchlist;
        this.filterList = searchlist;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.search_item, parent, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        final SearchModel searchModel = searchlist.get(position);
        holder.tv_name_search.setText(searchModel.getName());
        holder.tv_code_search.setText(searchModel.getCode());

        holder.ll_search_item.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, SearchDisplay.class);
                intent.putExtra("sonalcode", searchModel.getCode());
                String rate = searchModel.getRate();
                intent.putExtra("rate", searchModel.getRate());
                intent.putExtra("productid", searchModel.getProductid());
                intent.putExtra("brandid", searchModel.getBrandid());
                context.startActivity(intent);
            }
        });
    }


    CustomFilter filter;


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

    @Override
    public Filter getFilter() {
        if (filter == null) {
            filter = new CustomFilter();
        }
        return filter;
    }



class CustomFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        // TODO Auto-generated method stub
        FilterResults results = new FilterResults();
        if (constraint != null && constraint.length() > 0) {
            //CONSTARINT TO UPPER
            constraint = constraint.toString().toLowerCase();

            ArrayList<SearchModel> filters = new ArrayList<SearchModel>();
            String[] separated = constraint.toString().toLowerCase().split(" ");

            //get specific items
            for (int i = 0; i < filterList.size(); i++) {
                for (int j = 0; j < separated.length; j++) {
                    if (filterList.get(i).getName().toLowerCase().contains(separated[j]) || filterList.get(i).getCode().toLowerCase().contains(separated[j])) {
                        SearchModel p = new SearchModel(filterList.get(i).getBrandid(), filterList.get(i).getProductid(), filterList.get(i).getRate(), filterList.get(i).getImage(), filterList.get(i).getName(), filterList.get(i).getCode());
                        filters.add(p);
                        break;
                    }
                }
            }
            results.count = filters.size();
            results.values = filters;
        } else {
            results.count = filterList.size();
            results.values = filterList;
        }
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        // TODO Auto-generated method stub
        searchlist = (ArrayList<SearchModel>) results.values;
        notifyDataSetChanged();
    }
}

Это мой поиск

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

            @Override
            public boolean onQueryTextSubmit(String query) {

                rv_search.setVisibility(View.GONE);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                /*newText = newText.replace(" ", "");
                newText = newText.trim();*/
                if (newText != null && TextUtils.getTrimmedLength(newText) > 0) {

                    rv_search.setVisibility(View.VISIBLE);
                    searchAdapter.getFilter().filter(newText);

                } else {
                    rv_search.setVisibility(View.GONE);

                }

                return false;
            }
        });

1 Ответ

0 голосов
/ 13 ноября 2018
      public Filter getFilter() {

        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults results = new FilterResults();
                List<DatumVoters> filteredResults = null;
                if (constraint.length() == 0) {
                    filteredResults = odatumList;
                } else {
                    filteredResults = 
           getFilteredResults(constraint.toString().toLowerCase());
                }


                results.values = filteredResults;

                return results;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults 
    results) {
                ddatumList = (List<DatumVoters>) results.values;
                adapter.notifyDataSetChanged();
            }
        };
    }

    protected List<DatumVoters> getFilteredResults(String s) {
        List<DatumVoters> results = new ArrayList<>();
        for (DatumVoters item : odatumList) {
            if (item.getFirstname().toLowerCase().contains(s) ||
                    item.getVoterId().toLowerCase().contains(s)) {
                results.add(item);
            }
        }
        return results;
    }
...