Я работаю над базовым c android приложением, которое управляет контактами. Я использую пользовательский адаптер и пользовательский просмотр списка. У меня есть класс ContactItem, который представляет каждый контакт. Каждый контакт в представлении списка является экземпляром ContactItem. Когда я реализовал свой вид поиска, приложение вылетало. Я следовал этому ответу , но каждый раз, когда я пишу в поиске, чтобы отфильтровать представление списка, приложение вылетает.
Буду признателен за поддержку, потому что я пытаюсь найти решение с февраля. Вот мой адаптер:
public class CustomAdapter extends ArrayAdapter<ContactItem> implements Filterable {
private Context context;
private ArrayList<ContactItem> arrayList;
public CustomAdapter(@NonNull Context context, int resource, ArrayList<ContactItem> arrayList) {
super(context, resource, arrayList);
this.context = context;
this.arrayList = arrayList;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = convertView;
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.customlist, parent, false);
TextView nom = (TextView) view.findViewById(R.id.nom);
String nomComplet = arrayList.get(position).getPrenom() + " " +arrayList.get(position).getNom();
nom.setText(nomComplet);
return view;
}
Filter myFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
ArrayList<ContactItem> templist = new ArrayList<ContactItem>();
//constraint is the text you want to filter your list with
//arraylist is the data set we will filter from
if(constraint != null && arrayList !=null){
int length = arrayList.size();
int i ;
String nomComplet;
Integer id;
String nom, prenom,phone,adresse,email;
for(i=0;i<length;i++){
nomComplet = arrayList.get(i).getNom()+" "+ arrayList.get(i).getPrenom();
if(nomComplet.toUpperCase().contains(constraint.toString().toUpperCase())){
ContactItem item = (ContactItem) arrayList.get(i);
templist.add(item);
}
}
filterResults.values = templist;
filterResults.count = templist.size();
}else {
filterResults.values = arrayList;
filterResults.count = arrayList.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
arrayList = (ArrayList<ContactItem>) results.values;
if(results.count>0){
notifyDataSetChanged();
}else{
notifyDataSetInvalidated();
}
}
};
@NonNull
@Override
public Filter getFilter() {
return myFilter;
}
}