фильтр показывает не правильный список после того, как он сделал фильтрацию - PullRequest
0 голосов
/ 14 февраля 2020

Я отредактировал свой класс адаптера и расширил фильтруемый класс. Моя функция поиска работает, но я не могу получить точный список.

вот мой класс адаптера:

public class ListViewAdapter extends BaseAdapter implements Filterable{
Context context;
private List<Student> studentList;
private List<Student> orginStudentList;

public ListViewAdapter(Context context,List<Student> studentList)
{
    this.studentList = new ArrayList<>();
    this.studentList = studentList;
    this.orginStudentList = studentList;
    this.context = context;
}
@Override
public Filter getFilter() {
    if(nameFilter == null)
        nameFilter = new NameFilter();
    return nameFilter;
}
public void resetData() {
    studentList = orginStudentList;
}
private class NameFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();
        // We implement here the filter logic
        if ((constraint == null) || (constraint.length() == 0)) {
            // No filter implemented we return all the list
            results.values = orginStudentList;
            results.count = orginStudentList.size();
        }else if (Character.isDigit(constraint.charAt(constraint.length()-1))){
            results.values = studentList;
            results.count = studentList.size();
        }
        else {
            // We perform filtering operation
            List<Student> nStudentList = new ArrayList<Student>();
            for (Student stu : orginStudentList) {
                String name = stu.getName();
                if (name.contains(constraint))
                    nStudentList.add(stu);
            }
            results.values = nStudentList;
            results.count = nStudentList.size();
        }
        return results;
    }
    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        studentList = (List<Student>)results.values;
        notifyDataSetChanged();
    }
}

} Я проверяю, равны ли результаты нулю или нулю, и если да, то вернуть точный список? Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020
 private void filter(String text) {
        List<Model> filterdNames = new ArrayList<>();


        for (Model s : Models) {

            if (s.getName().contains(text)) {

                filterdNames.add(s);
            }
        }

        //calling a method of the adapter class and passing the filtered list
        recyclerAdapter.filterList(filterdNames);
    }
0 голосов
/ 14 февраля 2020

добавить notifyDataSetChanged (); внутренний адаптер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...