Android Studio getFilter does not sort

17 Views Asked by At

This is my RecyclerViewAdapter code

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> implements Filterable{
Context context;
ArrayList<RecyclerViewItems> itemsArrayList;
ArrayList<RecyclerViewItems> itemsArrayListFull;
private SelectItemListener listener;

RelativeLayout plannerLayout;

public RecyclerViewAdapter(Context context, ArrayList<RecyclerViewItems> itemsArrayList, SelectItemListener listener) {
    this.context = context;
    this.itemsArrayListFull = itemsArrayList;
    this.itemsArrayList = new ArrayList<>(itemsArrayListFull);
    this.listener = listener;
}

@NonNull
@Override
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new RecyclerViewHolder(LayoutInflater.from(context).inflate(R.layout.recyclerview_items_layout, parent, false));
}

@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
    holder.nameView.setText(itemsArrayListFull.get(position).getName());
    holder.sizeView.setText(itemsArrayListFull.get(position).getSizeString());
    holder.imageView.setImageResource(itemsArrayListFull.get(position).getImage());
    holder.imageView.setTag(itemsArrayListFull.get(position).getImage());

    holder.imageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            listener.onItemSelected(holder.imageView);
            return false;
        }
    });
}

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

@Override
public Filter getFilter() {
    return itemsFilter;
}

private final Filter itemsFilter = new Filter(){
    @Override
    protected FilterResults performFiltering(CharSequence charSequence) {
        ArrayList<RecyclerViewItems> filteredItemsList = new ArrayList<>();

        if (charSequence == null || charSequence.length() == 0){
            filteredItemsList.addAll(itemsArrayListFull);
        } else {
            String filterPattern = charSequence.toString().toLowerCase().trim();

            for(RecyclerViewItems recyclerViewItems : itemsArrayListFull){
                if(recyclerViewItems.name.toLowerCase().contains(filterPattern)){
                    filteredItemsList.add(recyclerViewItems);
                }
            }
        }
        FilterResults results = new FilterResults();
        results.values = filteredItemsList;
        results.count = filteredItemsList.size();
        return results;
    }

    @Override
    protected void publishResults(CharSequence charSequence, FilterResults results) {
        itemsArrayList.clear();
        itemsArrayList.addAll((ArrayList)results.values);
        notifyDataSetChanged();
    }
};
}

This is my main activity page.

public class Planner_Area_Page extends AppCompatActivity implements AdapterView.OnItemSelectedListener, SelectItemListener {

    Spinner spinner;

    //Planner area layout variables
    RelativeLayout plannerArea;
    BathroomPlannerLayout bathroomPlannerLayout;
    RecyclerViewAdapter recyclerViewAdapter;
    ArrayList<RecyclerViewItems> itemsArrayList;
    RecyclerView recyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_planner_area);
        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        //Planner area layout init
        plannerArea = findViewById(R.id.plannerArea);
        bathroomPlannerLayout = new BathroomPlannerLayout(this, plannerArea);
        itemsArrayList  = new ArrayList<RecyclerViewItems>();

        setSpinner();
        initSearchWidget();
        makeResponsive();
        getData();

    }
private void getData() {
    itemsArrayList.add(new RecyclerViewItems("toilet", 9, 9, R.drawable.toilet));
    itemsArrayList.add(new RecyclerViewItems("shower", 9, 9, R.drawable.toilet));
    itemsArrayList.add(new RecyclerViewItems("toilet", 9, 9, R.drawable.toilet));
    itemsArrayList.add(new RecyclerViewItems("toilet", 9, 9, R.drawable.toilet));
    itemsArrayList.add(new RecyclerViewItems("toilet", 9, 9, R.drawable.toilet));

    recyclerViewAdapter = new RecyclerViewAdapter(getApplicationContext(), itemsArrayList, this);
    recyclerView.setAdapter(recyclerViewAdapter);
    recyclerViewAdapter.notifyDataSetChanged();
}
//set searchview on the menubar
@Override
public boolean onCreateOptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.menu_item,menu);
    MenuItem menuItem = menu.findItem(R.id.app_bar_search );
    SearchView searchView = (SearchView) menuItem.getActionView();
    searchView.setMaxWidth(Integer.MAX_VALUE);
    searchView.setQueryHint("Search Here!");



    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String userText) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String userText) {
            recyclerViewAdapter.getFilter().filter(userText);
            return true;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

I thought when I type any word on the searchview, and that text goest to getfilter method with parameter"userText".

and then that "userText" goes into itemsFilter and sort the items and put new item list in the filtereditemslist.

But it is not sorting when I run debug. How can I sort this out?

0

There are 0 best solutions below