'Android search view won't work in fragment

When I try to search for members in the search view nothing shows up. Everything just vanishes.

all_members

public class all_members extends Fragment  {
    ProgressDialog pg;

    RecyclerView recyclerView;
    AllMembersCustomAdapter myAdapter;
    RecyclerView.LayoutManager layoutManager;



    ArrayList<AllMembersRecyclerRepresent> members;


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
        OnBackPressedCallback callback = new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
                FragmentTransaction fr = getActivity().getSupportFragmentManager().beginTransaction();
                fr.replace(R.id.fragment_container,new Home());
                fr.commit();
            }
        };

        requireActivity().getOnBackPressedDispatcher().addCallback(callback);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        //this line is very important the bwlo line will set the search view
        setHasOptionsMenu(true);
        return inflater.inflate(R.layout.all_member, container, false);
    }



    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        pg=new ProgressDialog(getContext());
        pg.setTitle("Please wait...");
        pg.setMessage("Loading all members");
        pg.setCanceledOnTouchOutside(false);
        pg.show();
        setHasOptionsMenu(true);
        super.onViewCreated(view, savedInstanceState);




        recyclerView=getActivity().findViewById(R.id.r_view_member);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(getContext());
        members = new ArrayList<>();
        getvolley();
        Log.d("mem",members.toString());


        recyclerView.setLayoutManager(layoutManager);
        myAdapter = new AllMembersCustomAdapter(members);
        recyclerView.setAdapter(myAdapter);




    }




    public void getvolley(){
        //volley and get all members list

        String url="";

        RequestQueue queue = Volley.newRequestQueue(getActivity());
        JsonArrayRequest requestUrl=new JsonArrayRequest(Request.Method.POST, url, null,new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                for(int i=0;i< response.length();i++){




                    try {
                        JSONObject jsonObject = response.getJSONObject(i);
                        AllMembersRecyclerRepresent ar= new AllMembersRecyclerRepresent();
                        ar.setName( jsonObject.getString("name"));
                        ar.setSurname( jsonObject.getString("surname"));
                        ar.setPh_no( jsonObject.getString("ph_no"));
                        String id=( jsonObject.getString("member_id"));
                        String email=( jsonObject.getString("email"));
                        String is_active=( jsonObject.getString("is_active"));
                        String dob=( jsonObject.getString("date_of_birth"));
                        String medical_history=( jsonObject.getString("medical_history"));

                        DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
                        LocalDate date = org.joda.time.LocalDate.parse(dob, formatter);
                        ar.setDOB(String.valueOf(date));
                        Log.d("date:",String.valueOf(date));
                        ar.setId(id);
                        ar.setDOB(String.valueOf(date));
                        ar.setEmail(email);
                        ar.setIs_active(is_active);
                        ar.setMedical_history(medical_history);
                        ar.setIs_active(is_active);
                        members.add(ar);




                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    myAdapter.notifyDataSetChanged();


                }
                pg.cancel();
                Toast.makeText(getContext(), "Total Members: "+myAdapter.getItemCount(), Toast.LENGTH_LONG).show();
                Toast.makeText(getContext(), "Total Members: "+myAdapter.getItemCount(), Toast.LENGTH_LONG).show();

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getContext(), error+"Something went wrong.\nPlease check your internet connection", Toast.LENGTH_LONG).show();
                pg.cancel();
            }
        });


        MySingleton.getInstance(getActivity()).addRequestQueue(requestUrl);

    }


    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
        inflater.inflate(R.menu.menuu,menu);
        MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) item.getActionView();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                myAdapter.getFilter().filter(newText);
                return false;
            }
        });
        super.onCreateOptionsMenu(menu, inflater);
    }

AdapterCode

public class AllMembersCustomAdapter extends RecyclerView.Adapter<AllMembersCustomAdapter.ViewHolder> implements Filterable {

    private final ArrayList<AllMembersRecyclerRepresent> members;

    //member's list without being filtered
    private final ArrayList<AllMembersRecyclerRepresent>allMembers;

    public AllMembersCustomAdapter(ArrayList<AllMembersRecyclerRepresent> list){
        members=list;
        allMembers=new ArrayList<>(list);
    }



    public class ViewHolder extends RecyclerView.ViewHolder{

        TextView name,surname,ph_no,dob;
        ImageView status;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            name=itemView.findViewById(R.id.nameR);
            surname=itemView.findViewById(R.id.surnameR);
            ph_no=itemView.findViewById(R.id.ph_noR);
            dob=itemView.findViewById(R.id.dob_r);
            status=itemView.findViewById(R.id.statusR);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //this returns the position of the item clicked
                    int position= getAdapterPosition();
                    //members.get(position).getName() this return the data in the array list
//                    Toast.makeText(view.getContext(), "position clicked is "+String.valueOf(
//                            members.get(position).getName()), Toast.LENGTH_SHORT).show();

                    String name= members.get(position).getName();
                    String surname = members.get(position).getSurname();
                    String ph_no = members.get(position).getPh_no();
                    String id = members.get(position).getId();
                    String email = members.get(position).getEmail();
                    String is_active = members.get(position).getIs_active();
                    String dob = members.get(position).getDOB();
                    String medical_history = members.get(position).getMedical_history();



                    Intent i = new Intent(view.getContext(), memberInfo.class);
                    i.putExtra("name",name);
                    i.putExtra("surname",surname);
                    i.putExtra("ph_no",ph_no);
                    i.putExtra("id",id);
                    i.putExtra("email",email);
                    i.putExtra("is_active",is_active);
                    i.putExtra("dob",dob);
                    i.putExtra("medical",medical_history);
                    view.getContext().startActivity(i);
                }
            });


        }

    }

    @NonNull
    @Override
    public AllMembersCustomAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.all_members_recycler,parent,false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull AllMembersCustomAdapter.ViewHolder holder, int position) {

        holder.itemView.setTag(members.get(position));
        holder.name.setText(members.get(position).getName());
        holder.ph_no.setText(members.get(position).getPh_no());
        holder.surname.setText(members.get(position).getSurname());
        holder.dob.setText(members.get(position).getId());
        //setting image
        //volley to see if the member is Active or not

        if(members.get(position).getIs_active()=="true"){
            holder.status.setImageResource(R.drawable.active);

        }else{
            holder.status.setImageResource(R.drawable.inactive);
        }

    }

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


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

    

    Filter filter = new Filter() {
        @Override
        
        protected FilterResults performFiltering(CharSequence charSequence) {
            ArrayList<AllMembersRecyclerRepresent> filteredList = new ArrayList<>();
            if(charSequence==null || charSequence.length()==0){
                //if empty show all movies
                filteredList.addAll(allMembers);
            }else{
                String filterPattern = charSequence.toString().toLowerCase().trim();
                for(AllMembersRecyclerRepresent mem:allMembers){
                    if(mem.getName().toLowerCase().contains(filterPattern)){
                        filteredList.add(mem);
                    }
                }
                }

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



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

When I click on search the list just becomes blank.

menu

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/action_search"
        android:title="SEARCH"
            android:icon="@drawable/search"
        app:showAsAction="always|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
         />

</menu>

I even tried the same on another activity but still it doesn't work. What am I doing wrong here. The data in the recycler view is being fetched by the server but it won't filter out when clicked on search.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source