如何显示自动完成文本框包含的建议?
how to show suggestions of autocomplete Text Box contains with??
自动完成框下拉建议不显示包含其显示的 StartWith。
这是我的代码
final ArrayList<String> listFilterJob = new ArrayList<>();
listFilterJob.add("Anuj");
listFilterJob.add("Akshay");
listFilterJob.add("Ananta");
listFilterJob.add("Muskan");
listFilterJob.add("sachin");
ArrayAdapter adapterFiltersJob = new ArrayAdapter(this, android.R.layout.simple_list_item_1, listFilterJob);
edtFilterJob.setThreshold(1);
edtFilterJob.setDropDownWidth(350);
edtFilterJob.setAdapter(adapterFiltersJob);
当我键入 "an" 以自动完成文本框时,其显示结果 Anuj 和 Ananta 在下拉列表中,但我想要Anuj,An安踏和马斯克an。
我该怎么做,帮帮我。
您需要扩展实现 Filterable
的 ArrayAdapter
。
检查这个 SO 问题和答案:Filtering AutoCompleteTextView to show partial match
所以你的解决方案是(问题和答案的组合):
public class CodesArrayAdapter extends ArrayAdapter implements Filterable{
List<String> allCodes;
List<String> originalCodes;
StringFilter filter;
public CodesArrayAdapter(Context context, int resource, List<String> keys) {
super(context, resource, keys);
allCodes=keys;
originalCodes=keys;
}
public int getCount() {
return allCodes.size();
}
public Object getItem(int position) {
return allCodes.get(position);
}
public long getItemId(int position) {
return position;
}
private class StringFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<String> list = originalCodes;
int count = list.size();
final ArrayList<String> nlist = new ArrayList<String>(count);
String filterableString ;
for (int i = 0; i < count; i++) {
filterableString = list.get(i);
if (filterableString.toLowerCase().contains(filterString)) {
nlist.add(filterableString);
}
}
results.values = nlist;
results.count = nlist.size();
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
allCodes = (ArrayList<String>) results.values;
notifyDataSetChanged();
}
}
@Override
public Filter getFilter()
{
return new StringFilter();
}
}
自动完成框下拉建议不显示包含其显示的 StartWith。
这是我的代码
final ArrayList<String> listFilterJob = new ArrayList<>();
listFilterJob.add("Anuj");
listFilterJob.add("Akshay");
listFilterJob.add("Ananta");
listFilterJob.add("Muskan");
listFilterJob.add("sachin");
ArrayAdapter adapterFiltersJob = new ArrayAdapter(this, android.R.layout.simple_list_item_1, listFilterJob);
edtFilterJob.setThreshold(1);
edtFilterJob.setDropDownWidth(350);
edtFilterJob.setAdapter(adapterFiltersJob);
当我键入 "an" 以自动完成文本框时,其显示结果 Anuj 和 Ananta 在下拉列表中,但我想要Anuj,An安踏和马斯克an。 我该怎么做,帮帮我。
您需要扩展实现 Filterable
的 ArrayAdapter
。
检查这个 SO 问题和答案:Filtering AutoCompleteTextView to show partial match
所以你的解决方案是(问题和答案的组合):
public class CodesArrayAdapter extends ArrayAdapter implements Filterable{
List<String> allCodes;
List<String> originalCodes;
StringFilter filter;
public CodesArrayAdapter(Context context, int resource, List<String> keys) {
super(context, resource, keys);
allCodes=keys;
originalCodes=keys;
}
public int getCount() {
return allCodes.size();
}
public Object getItem(int position) {
return allCodes.get(position);
}
public long getItemId(int position) {
return position;
}
private class StringFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<String> list = originalCodes;
int count = list.size();
final ArrayList<String> nlist = new ArrayList<String>(count);
String filterableString ;
for (int i = 0; i < count; i++) {
filterableString = list.get(i);
if (filterableString.toLowerCase().contains(filterString)) {
nlist.add(filterableString);
}
}
results.values = nlist;
results.count = nlist.size();
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
allCodes = (ArrayList<String>) results.values;
notifyDataSetChanged();
}
}
@Override
public Filter getFilter()
{
return new StringFilter();
}
}