refre sh просмотр списка с поиском (androidx) - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь создать небольшое приложение для своего клуба. Я использую пользовательский класс, персональный адаптер, чтобы вернуть файл json и список в основном действии, чтобы просмотреть всех зарегистрированных молодых людей. Все идеально. Но когда я пытаюсь использовать searchview, у меня возникает большая проблема. a

Я использую поиск в личной панели инструментов шириной androidx. Все нормально. Я использую onCreateOptionsMenu и два метода, которые я переопределяю:

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    MenuCompat.setGroupDividerEnabled(menu, true);

    MenuItem searchViewItem = menu.findItem(R.id.action_search);
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchViewItem);
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

            Toast.makeText(getApplicationContext(), "Query Inserted", Toast.LENGTH_SHORT).show();
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            Log.e("Main"," data search : "+newText);
            adapter.getFilter().filter(newText);
            return false;
        }
    });
    return true;
}

Теперь у меня есть персональный адаптер, который использует класс User:

public class UsersAdapter extends ArrayAdapter<User> implements Filterable {

private Context mContext;
private ArrayList<User> exampleList;
private ArrayList<User> exampleListFull;

public UsersAdapter(Context context, ArrayList<User> users) {
    super(context, 0, users);
    this.mContext = context;
    this.exampleList = users;
    exampleListFull= new ArrayList<>(users);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Get the data item for this position
    User user = getItem(position);
    // Check if an existing view is being reused, otherwise inflate the view
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false);
    }
    // Lookup view for data population
    TextView tvName = (TextView) convertView.findViewById(R.id.tvName);
    TextView tvHome = (TextView) convertView.findViewById(R.id.tvPrenom);
    TextView tvNb = (TextView) convertView.findViewById(R.id.edtNb);
    TextView tvAge = (TextView) convertView.findViewById(R.id.tvAge);
    // Populate the data into the template view using the data object
    tvName.setText(user.getNom());
    tvHome.setText(user.getPrenom());
    tvNb.setText(String.valueOf(position+1));
    tvAge.setText(String.valueOf(user.getAge()));
    // Return the completed view to render on screen
    return convertView;
}


@NonNull
@Override
public Filter getFilter() {
    return exampleFilter;
}

private Filter exampleFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        ArrayList<User> filteredList = new ArrayList<>();

        if (constraint == null || constraint.length() == 0) {
            filteredList.addAll(exampleList);
            Log.e("exampleFilter","remplissage de filteredList : " + filteredList.toString());
        } else {
            String filterPattern = constraint.toString().toLowerCase().trim();
            int i=0;
            for (User item : exampleList) {
                i++;
                if (item.getNom().toLowerCase().contains(filterPattern)) {
                    filteredList.add(item);
                }
            }
        }
        FilterResults results = new FilterResults();
        results.values = filteredList;

        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        exampleList.clear();
        exampleList.addAll((ArrayList) results.values);
        notifyDataSetChanged();
    }
};

}

I должна быть хорошая информация в "PUBLISHRESULTS" / "results.values, и в моем списке, когда я удаляю символ (например, adam to ada), мой список не является refre sh! И когда я удаляю все символы, мой список пуст и не похож на начало.

Сейчас я ничего не понимаю. Кто может мне помочь? Большое спасибо

...