Я пытаюсь создать небольшое приложение для своего клуба. Я использую пользовательский класс, персональный адаптер, чтобы вернуть файл 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! И когда я удаляю все символы, мой список пуст и не похож на начало.
Сейчас я ничего не понимаю. Кто может мне помочь? Большое спасибо