Как обновить ListView после изменения текста в SearchView - PullRequest
0 голосов
/ 26 марта 2019

В настоящее время в моих кодах нет ошибок, но всякий раз, когда я ищу элемент в ListView, он работает должным образом, но когда я возвращаю / удаляю ввод в SearchView, он не обновляется.Как мне написать код этой освежающей части?

Как и всякий раз, когда я набираю или удаляю что-то из SearchView, оно должно постоянно обновлять мой поиск, отображая соответствующие результаты в ListView.Например, если я полностью удалил вход в SearchView, он должен отобразить все доступные результаты (в настоящее время мой не обновится)

AuctionListAdapter.java:

public class AuctionListAdapter extends BaseAdapter implements Filterable {

    ValueFilter valueFilter;


    private Context context;
    private int layout;
    private ArrayList<Model> auctionList;





    public AuctionListAdapter(Context context, int layout, ArrayList<Model> auctionList) {
        this.context = context;
        this.layout = layout;
        this.auctionList = auctionList;

    }

    @Override
    public int getCount() {
        return auctionList.size();
    }

    @Override
    public Object getItem(int position) {
        return auctionList.get(position);
    }


    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public Filter getFilter() {
        if (valueFilter == null) {
            valueFilter = new ValueFilter();
        }
        return valueFilter;
    }

    private class ValueFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();

            if (constraint != null && constraint.length() > 0) {
                ArrayList<Model> filterList = new ArrayList<Model>();
                for (int i = 0; i < auctionList.size(); i++) {
                    if ((auctionList.get(i).getName().toUpperCase())
                            .contains(constraint.toString().toUpperCase())||(auctionList.get(i).getDescription().toUpperCase())
                            .contains(constraint.toString().toUpperCase())||(auctionList.get(i).getPrice().toUpperCase())
                            .contains(constraint.toString().toUpperCase())||(auctionList.get(i).getDuration().toUpperCase())
                            .contains(constraint.toString().toUpperCase())) {
                        Model model = new Model(auctionList.get(i).getId(),auctionList.get(i).getName(),
                                auctionList.get(i).getDescription(),auctionList.get(i).getPrice(),auctionList.get(i).getDuration()
                                ,auctionList.get(i).getImage());
                        filterList.add(model);


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

        }


        @Override
        protected void publishResults(CharSequence constraint,
                                      FilterResults results) {
            auctionList = (ArrayList<Model>) results.values;

            notifyDataSetChanged();

        }




    }
}

AuctionList.java:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.searchmenu,menu);

    MenuItem myActionMenuItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView)myActionMenuItem.getActionView();

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            mAdapter.getFilter().filter(newText);
            return false;
        }
    });


    return super.onCreateOptionsMenu(menu);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...