Исследование SearchView дает только первый элемент в списке - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь использовать функцию поиска для поиска карты, но я получаю только первый элемент в списке. Я следовал инструкциям учебника и адаптировал его к своему проекту. Я на самом деле использую библиотеку androidx. В MainActivity я создаю свой Arraylist с экземпляром из класса Model и заполняю его. В CustomFilter есть алгоритм, который фильтрует исследования. Я использовал log.d в if для отладки, и он показывает правильное исследование, которое я сделал в компиляции.

MainActivity. java

  RecyclerView card;
    MyAdapter myAdapter;
    SharedPreferences preferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pryer);
        //Toast.makeText(getApplicationContext()," page prayers " ,Toast.LENGTH_SHORT).show();

        card = findViewById(R.id.PrayersEvents);
        preferences = this.getSharedPreferences("My_Pref", MODE_PRIVATE);
        getMyList();


    }
    @Override
    public boolean  onCreateOptionsMenu(Menu menu){

            MenuInflater menuInflater = getMenuInflater();
            menuInflater.inflate(R.menu.menu,menu);
            MenuItem item = menu.findItem(R.id.search);
            SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){

                @Override
                public boolean onQueryTextSubmit(String query) {

                    myAdapter.getFilter().filter(query);
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String newText) {

                    myAdapter.getFilter().filter(newText);
                    return false;
                }
        });
        return  true;
    }
    private void getMyList() {
        ArrayList<Model> models = new ArrayList<>();

        String pr_ = "Prayer : ";
        String nb_ = "People : 100";

        Model n = new Model();
        n.setName("Mohamed");
        n.setMosque("Khalil");
        n.setPrayer(pr_ + " Dohr ");
        n.setNbParticipants(nb_ );
        n.setDescription("///////////iiiiiiiiiii///////// ");
        models.add(n);

        Model c = new Model();
        c.setName("Sofian");
        c.setMosque("Mouahidinne");
        c.setPrayer(pr_ + " Dohr ");
        c.setNbParticipants(nb_ );
        c.setDescription("//////////////////// ");
        models.add(c);

        Model e = new Model();
        e.setName("Ilyass");
        e.setMosque("Jadid");
        e.setPrayer(pr_ + " Dohr ");
        e.setNbParticipants(nb_ );
        e.setDescription("////////////////////  ");
        models.add(e);


        card.setLayoutManager(new LinearLayoutManager(this));
        myAdapter = new MyAdapter(this, models);
        card.setAdapter(myAdapter);


    }

CustomFilter. java

public class CustomerFile extends Filter {
    ArrayList<Model> filterList;
    MyAdapter adapter;

    public CustomerFile(ArrayList<Model> filterList, MyAdapter adapter)
    {
        this.filterList = filterList;
        this.adapter = adapter;
    }

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {

        FilterResults results = new FilterResults();

        if (constraint != null && constraint.length() > 0) {

            constraint = constraint.toString().toUpperCase();

            ArrayList<Model> filterModels = new ArrayList<>();

            for (int i = 0; i < filterList.size(); i++) {

                Log.d("Files", " mosque recherchée : " +filterList.get(i).getMosque() );

                if (filterList.get(i).getMosque().toUpperCase().contains(constraint))
                {
             //       Log.d("Files", " mosque recherchée : " +filterList.get(i).getMosque() );
                    filterModels.add(filterList.get(i));
                }
            }

            results.count = filterModels.size();
            results.values = filterModels;

        }

        else {
            results.count = filterList.size();
            results.values = filterList;
        }

        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {

        adapter.models = (ArrayList<Model>) results.values;
        adapter.notifyDataSetChanged();


    }
}

Модель. java

public class Model {

    private String name, mosque,participate,prayer,NbParticipants,description;
    private Button btn;
    private RelativeLayout card;


    public RelativeLayout getCard() {
        return card;
    }

    public void setCard(RelativeLayout card) {
        this.card = card;
    }

    public Button getBtn() {
        return btn;
    }

    public String getMosque() {
        return mosque;
    }

    public void setMosque(String mosque) {
        this.mosque = mosque;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...