我想在片段中实现 recyclerview 的搜索栏。我在我的片段中尝试了以下代码,但它不起作用

I want to implement a searchbar for recycler view in a fragment. I have tried the below code in my fragment but it is not working

我已经在我的片段 class 中尝试了以下代码,但它没有工作,也没有显示任何错误,我已经提供了适配器 class 代码和片段 class代码请告诉我在哪里弄错了当我 运行 代码时它甚至没有显示片段上的搜索栏

//片段class代码

public class PharmacyPatientFragment extends Fragment {
    PharmacyAdapter Adapter;
    private FragmentPharmacyPatientBinding binding;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        binding = FragmentPharmacyPatientBinding.inflate(inflater);
        binding.recylerviewPharmacy.setLayoutManager(new LinearLayoutManager(getContext()));
        Adapter = new PharmacyAdapter(dataqueue());
        binding.recylerviewPharmacy.setAdapter(Adapter);
        return binding.getRoot();
    }

    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {

        menu.clear();
        inflater.inflate(R.menu.search_option, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) searchItem.getActionView();
        searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM);
        super.onCreateOptionsMenu(menu, inflater);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                Adapter.getFilter().filter(s);
                return false;
            }
        });
        searchView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

    }

    public ArrayList<PharmacyDataModel> dataqueue() {
        ArrayList<PharmacyDataModel> holder = new ArrayList<>();
        PharmacyDataModel obj1 = new PharmacyDataModel();
        obj1.setMed_name("Remdesiver");
        obj1.setMfg_change("HealthBio Pharmaceuticals");
        obj1.setPrice_change("10000Rs.");
        obj1.setQty_change("1 unit");
        obj1.setImg_name(R.drawable.remdesiver);
        holder.add(obj1);
        PharmacyDataModel obj2 = new PharmacyDataModel();
        obj2.setMed_name("PPE Kits");
        obj2.setMfg_change("HealthBio Pharmaceuticals");
        obj2.setPrice_change("800Rs.");
        obj2.setQty_change("1 unit");
        obj2.setImg_name(R.drawable.ppe);
        holder.add(obj2);
        PharmacyDataModel obj3 = new PharmacyDataModel();
        obj3.setMed_name("Masks");
        obj3.setMfg_change("HealthBio Pharmaceuticals");
        obj3.setPrice_change("100Rs.");
        obj3.setQty_change("1 unit");
        obj3.setImg_name(R.drawable.masks);
        holder.add(obj3);
        PharmacyDataModel obj4 = new PharmacyDataModel();
        obj4.setMed_name("Gloves");
        obj4.setMfg_change("HealthBio Pharmaceuticals");
        obj4.setPrice_change("50Rs.");
        obj4.setQty_change("1 unit");
        obj4.setImg_name(R.drawable.gloves);
        holder.add(obj4);
        PharmacyDataModel obj5 = new PharmacyDataModel();
        obj5.setMed_name("Gluconate tablets");
        obj5.setMfg_change("HealthBio Pharmaceuticals");
        obj5.setPrice_change("100Rs.");
        obj5.setQty_change("20 tablets");
        obj5.setImg_name(R.drawable.gluconate);
        holder.add(obj5);
        PharmacyDataModel obj6 = new PharmacyDataModel();
        obj6.setMed_name("Sugar Free");
        obj6.setMfg_change("HealthBio Pharmaceuticals");
        obj6.setPrice_change("250Rs.");
        obj6.setQty_change("1 unit");
        obj6.setImg_name(R.drawable.sugarfree);
        holder.add(obj6);
        PharmacyDataModel obj7 = new PharmacyDataModel();
        obj7.setMed_name("Zincovit");
        obj7.setMfg_change("HealthBio Pharmaceuticals");
        obj7.setPrice_change("150Rs.");
        obj7.setQty_change("1 unit");
        obj7.setImg_name(R.drawable.zincovit);
        holder.add(obj7);

        return holder;
    }


}

//适配器class代码

public class PharmacyAdapter extends RecyclerView.Adapter<PharmacyViewHolder> implements Filterable {
    ArrayList<PharmacyDataModel> data;
    ArrayList<PharmacyDataModel> datacopy;
    private final Filter dataFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            ArrayList<PharmacyDataModel> filteredList = new ArrayList<>();
            if (charSequence == null || charSequence.length() == 0) {
                filteredList.addAll(datacopy);
            } else {
                String filterPattern = charSequence.toString().toLowerCase().trim();
                for (PharmacyDataModel item : datacopy) {
                    if (item.getMed_name().toLowerCase().contains(filterPattern)) {
                        filteredList.add(item);
                    }
                }
            }
            FilterResults results = new FilterResults();
            results.values = filteredList;
            return results;
        }

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

    public PharmacyAdapter(ArrayList<PharmacyDataModel> data) {
        this.data = data;
        datacopy = new ArrayList<>(data);
    }

    @NonNull
    @Override
    public PharmacyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.singlepharmacy_row, parent, false);
        return new PharmacyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull PharmacyViewHolder holder, int position) {
        holder.textMedName.setText(data.get(position).getMed_name());
        holder.textMedQty.setText(data.get(position).getQty_change());
        holder.textMedPrice.setText(data.get(position).getPrice_change());
        holder.textMedMfg.setText(data.get(position).getMfg_change());
        holder.imageMed.setImageResource(data.get(position).getImg_name());

    }

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

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

}

您需要使用 str 将循环计数器转换为字符串,将值包含在列表中,使用乘法运算符重复列表中的值,然后使用字符串 join插入空格的函数。这是一个例子。如果你想从 1 1 1 而不是像我在这里做的那样只是 1 开始,那么 print(' '.join((i + 2) * [str(i)])) 而不是显示的

>>> for i in range(1, 6):
...     print(' '.join(i*[str(i)]))
...
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5