Я работаю над реализацией решения для поиска среди 10000 продуктов и получения информации о них.Поэтому я решил внедрить AutoCompleteTextView, чтобы помочь пользователю найти продукт.Поиск среди различных решений Я реализовал один вариант, и он отлично работает, но мне интересно, есть ли какие-то рекомендации, чтобы узнать, можно ли улучшить решения или сделать их оптимальными?
Общая структура моих решений следующая:
---- Мой класс данных ----
public class CountryItem {
private String countryName;
private int flagImage;
public CountryItem(){}
public CountryItem(String countryName, int flagImage) {
this.countryName = countryName;
this.flagImage = flagImage;
}
public ArrayList<CountryItem> fillCountryList() {
ArrayList<CountryItem> countryList = new ArrayList<>();
countryList.add(new CountryItem("Afghanistan", R.drawable.afghanistan));
countryList.add(new CountryItem("Albania", R.drawable.albania));
countryList.add(new CountryItem("Algeria", R.drawable.algeria));
return countryList;
}
public String getCountryName() {
return countryName;
}
public int getFlagImage() {
return flagImage;
}
}
---- MainClass ----
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<CountryItem> countryList = new CountryItem().fillCountryList();
AutoCompleteTextView editText = findViewById(R.id.actv);
AutoCompleteCountryAdapter adapter = new AutoCompleteCountryAdapter(this, countryList);
editText.setAdapter(adapter);
}
}
AdapterClass
public class AutoCompleteCountryAdapter extends ArrayAdapter<CountryItem> {
private List<CountryItem> countryListFull;
public AutoCompleteCountryAdapter(@NonNull Context context, @NonNull List<CountryItem> countryList) {
super(context, 0, countryList);
countryListFull = new ArrayList<>(countryList);
}
@NonNull
@Override
public Filter getFilter() {
return countryFilter;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.country_autocomplete_row, parent, false
);
}
TextView textViewName = convertView.findViewById(R.id.text_view_name);
ImageView imageViewFlag = convertView.findViewById(R.id.image_view_flag);
CountryItem countryItem = getItem(position);
if (countryItem != null) {
textViewName.setText(countryItem.getCountryName());
imageViewFlag.setImageResource(countryItem.getFlagImage());
}
return convertView;
}
private Filter countryFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<CountryItem> suggestions = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
suggestions.addAll(countryListFull);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (CountryItem item : countryListFull) {
if (item.getCountryName().toLowerCase().contains(filterPattern)) {
suggestions.add(item);
}
}
}
results.values = suggestions;
results.count = suggestions.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
clear();
addAll((List) results.values);
notifyDataSetChanged();
}
@Override
public CharSequence convertResultToString(Object resultValue) {
return ((CountryItem) resultValue).getCountryName();
}
};
}
Некоторые ссылки или комментарии могут помочь мне узнать, можно ли улучшить решение в каком-либо аспекте.