autocompletetextview でテキストをフィルタリングしたい。テキストの入力を開始すると、フィルター処理されたテキストを表示する代わりに、テキストの完全なリストが表示されます。つまり、リストをフィルタリングしません。
問題を解決するのを手伝ってください。試しましたが、問題を認識できませんでした
public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
private ArrayList<String> mData;
public AutoCompleteAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
mData = new ArrayList<String>();
mData.add("one");
mData.add("oneee");
mData.add("two");
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int index) {
return mData.get(index);
}
@Override
public Filter getFilter() {
Filter myFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<String> resultsSuggestions = new ArrayList<String>();
if(constraint != null) {
for (int i = 0; i < getCount(); i++) {
if(getItem(i).toString().startsWith(constraint.toString())){
resultsSuggestions.add(getItem(i).toString());
}
}
}
FilterResults results = new FilterResults();
results.values = resultsSuggestions;
results.count = resultsSuggestions.size();
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence contraint, FilterResults results) {
try {
ArrayList<String> newValues = (ArrayList<String>) results.values;
for (int i = 0; i < newValues.size(); i++) {
add(newValues.get(i));
}
if(results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
} catch(Exception e) {
Log.v("Near ATM", "Exception ::" + e.getMessage());
}
}
};
return myFilter;
}
}