Доброго, написал свой адаптер для AppCompatAutoCompleteTextView, поиск работает, но затираю данные в ArrayList при поиске и если удалить текст из поле, то результат поиска остаётся прежним, как правильно сделать поиск по вводу? вот код
package www.finefood.ExpansionEditText;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.TextView;
import java.util.ArrayList;
import www.finefood.R;
public class MyArrayAdapter extends ArrayAdapter<MyForArrayAdapter> {
private ArrayList<MyForArrayAdapter> list = new ArrayList<>();
private Activity context;
private Integer resource;
private LayoutInflater inflater;
public MyArrayAdapter(Context context, int resource,
ArrayList<MyForArrayAdapter> list1) {
super(context, resource, list1);
this.resource = resource;
this.context = (Activity) context;
this.list = list1;
inflater = this.context.getLayoutInflater();
}
private MyFilter filter;
@Override
public Filter getFilter() {
if (filter == null)
filter = new MyFilter();
return filter;
}
static class ViewHolder {
protected TextView text;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
String str = list.get(position).getNameProduct();
ViewHolder viewHolder;
if (convertView == null) {
view = inflater.inflate(resource, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.text_view_array_adapter);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
if (viewHolder != null)
viewHolder.text.setText(str);
return view;
}
@Override
public int getCount() {
return list.size();
}
@Override
public MyForArrayAdapter getItem(int position) {
return list.get(position);
}
private class MyFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
charSequence = charSequence.toString().toLowerCase();
FilterResults results = new FilterResults();
if (charSequence.toString().length() > 0) {
ArrayList<MyForArrayAdapter> tempList = new ArrayList<>();
for (int i = 0; list.size() > i; ++i) {
MyForArrayAdapter myArrayAdapter = list.get(i);
if (myArrayAdapter.getNameProduct().toLowerCase().contains(charSequence))
tempList.add(myArrayAdapter);
}
results.count = tempList.size();
results.values = tempList;
} else {
synchronized (this) {
results.count = list.size();
results.values = list;
}
}
return results;
}
//этот код содрал с какого-то сайта, но там использовался ArrayAdapter<String>
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
if (filterResults.values != null) {
list = (ArrayList<MyForArrayAdapter>) filterResults.values;
notifyDataSetChanged();
//проблема тут, тут очищается ArrayList, тем самым
//затирается, если не очищать, то начинает заполняться
//разрастаться после каждого введённого символа
clear();
//
for (int i = 0; list.size() > i; i++)
add(list.get(i));
notifyDataSetInvalidated();
}
}
}
}