Я создал пользовательский ArrayAdapter
, чтобы я мог отфильтровать результаты для моего AutoCompleteTextView
:
public class AutoCompleteCountryAdapter extends ArrayAdapter<String>
{
private List<String> countryListFull;
public AutoCompleteCountryAdapter(@NonNull Context context, int resource, @NonNull List<String> countryList)
{
super(context, resource, countryList);
countryListFull = new ArrayList<>(countryList);
}
@NonNull
@Override
public Filter getFilter()
{
return countryFilter;
}
private Filter countryFilter = new Filter()
{
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
FilterResults filterResults = new FilterResults();
List<String> suggestions = new ArrayList<>();
if (constraint == null || constraint.length() == 0)
{
suggestions.addAll(countryListFull);
} else
{
String filterPattern = constraint.toString().toLowerCase().trim();
for (String country : countryListFull)
{
if (country.toLowerCase().startsWith(filterPattern))
{
suggestions.add(country);
}
}
}
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults)
{
clear();
addAll((List) filterResults.values);
notifyDataSetChanged();
}
@Override
public CharSequence convertResultToString(Object resultValue)
{
return ((String) resultValue);
}
};
}
Однако, когда я пытаюсь использовать этот адаптер:
List<String> placeOfBirthList;
AutoCompleteCountryAdapter pobAdapter = new AutoCompleteCountryAdapter(new AutoCompleteCountryAdapter(getApplication().getApplicationContext(), android.R.layout.simple_dropdown_item_1line, placeOfBirthList));
Я получаю эту ошибку Logcat:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Я получаю это исключение в строке, которая является первой фигурной скобкой после создания нового фильтра:
private Filter countryFilter = new Filter()
{ // HERE
Я не вызываю это из моего MainActivity.java
, но из обычного метода в пределах ViewModel
из Fragment
другой деятельности.
public class MyViewModel extends AndroidViewModel {
private List<String> placeOfBirthList;
public MyViewModel(Application application) {
super(application);
myMethod();
}
private void myMethod() {
AutoCompleteCountryAdapter myAdapter = new AutoCompleteCountryAdapter(getApplication().getApplicationContext(), android.R.layout.simple_dropdown_item_1line, placeOfBirthList);
}
}