How to Filter the Recycler listview by pricerange using rangeseekbar?

228 Views Asked by At

I have a list of items in recyclerview.the items contains name,price etc.I want to filter the list like if user select pricerange from 1200 to 5000 through rangeseekbar it should only show the items within that price range.. I have used bottomsheetfragment for rangeseekbar

  price.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());

            LayoutInflater factory1 = LayoutInflater.from(getContext());
            View view1 = factory1.inflate(R.layout.range_seekbar, null);
            final CrystalRangeSeekbar rangeseekbar = (CrystalRangeSeekbar) view1.findViewById(R.id.rangeSeekbarprice);
            rangeseekbar.setMinValue(0);
            rangeseekbar.setMaxValue(10000);

            final TextView tvMin = (TextView) view1.findViewById(R.id.pricetextmin);
            final TextView tvMax = (TextView) view1.findViewById(R.id.pricetextmax);
            final Button okBtn=(Button)view1.findViewById(R.id.ok_btn_seekbar);
            tvMin.setText("$ "+"0");
            tvMax.setText("$ "+"10000");


            alertDialogBuilder.setView(view1);
            rangeseekbar.setOnRangeSeekbarChangeListener(new OnRangeSeekbarChangeListener() {
                @Override
                public void valueChanged(Number minValue, Number maxValue) {
                    tvMin.setText("$ "+rangeseekbar.getSelectedMinValue());

                    tvMax.setText("$ "+rangeseekbar
                    .getSelectedMaxValue());


                }
            });

this is for rangeseekbar which i created in bottomsheet

@Override
public Filter getFilter() {
    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            String charString = charSequence.toString();
            if (charString.isEmpty()) {
                data = pricelist;
            } else {
                List<HotelsListObj> filteredList = new ArrayList<>();
                for (HotelsListObj row : pricelist) {

                    // name match condition. this might differ depending on your requirement
                    // here we are looking for name or phone number match
                    if (row.getHotelPrice().toLowerCase().contains(charString.toLowerCase()) || row.getHotelPrice().contains(charSequence)) {
                        filteredList.add(row);
                    }
                }

                data = filteredList;
            }

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

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

this is for filtering but its not working

0

There are 0 best solutions below