У меня есть AutoCompleteTextView
и custom AutoCompleteTextView adapter.
, в моем списке 20 элементов, и все элементы содержат строку "vodafone".Когда я набираю один символ в AutoCompleteTextView
, он показывает результаты, а на втором не показывает список. Например;
<br/>->V
<br/>-->AutoComplete DropDown menu appears
<br/>->Vo
<br/>-->AutoComplete DropDown disappears
<br/>->Vod
<br/>-->AutoComplete DropDown menu appears
<br/>->Voda
<br/>-->AutoComplete DropDown disappears
<br/>...etc
Почему это происходит?Есть предложения?
вот мой адаптер:
package listadapters;
import java.util.ArrayList;
import java.util.Locale;
import objects.Item;
import utils.Logging;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
public class AutoCompleteTextAdapter2 extends BaseAdapter implements Filterable {
Context _context;
ArrayList<Item> _items = new ArrayList<Item>();
public AutoCompleteTextAdapter2(Context context, ArrayList<Item> items) {
_context = context;
for (int i = 0; i < items.size(); i++) {
_items.add(new Item(items.get(i)));
}
for (int i = 0; i < _items.size(); i++) {
orig.add(new Item(_items.get(i)));
}
filter = new ItemFilter();
}
@Override
public int getCount() {
if (_items != null)
return _items.size();
else
return 0;
}
@Override
public Object getItem(int arg0) {
return _items.get(arg0);
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
View gv;
if (arg1 == null){
gv = new View(_context);
}else {
gv = (View) arg1;
}
return gv;
}
@Override
public Filter getFilter() {
return filter;
}
private ItemFilter filter;
ArrayList<Item> orig = new ArrayList<Item>();
private class ItemFilter extends Filter {
public ItemFilter() {
}
ArrayList<Item> results = new ArrayList<Item>();
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if(constraint != null)
Logging.TraceMessage(constraint.toString(), "**", "1");
FilterResults oReturn = new FilterResults();
if (orig == null){
for (int i = 0; i < _items.size(); i++) {
orig.add(new Item(_items.get(i)));
}
}
if (constraint != null){
results.clear();
if (orig != null && orig.size() > 0) {
for (Item i : orig) {
if (i._itemName.toLowerCase(Locale.US).contains(constraint.toString().toLowerCase(Locale.US))){
results.add(new Item(i));
}
}
}
Logging.TraceMessage(String.valueOf(results.size()), "**", "2");
oReturn.values = results;
}
return oReturn;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
_items.clear();
for(int i = 0; i < ((ArrayList<Item>)results.values).size(); i++){
_items.add(new Item(((ArrayList<Item>)results.values).get(i)));
}
notifyDataSetChanged();
}
}
}
и установите код адаптера:
AutoCompleteTextAdapter2 adapter = new AutoCompleteTextAdapter2(myAct, GlobalVariables.currCategoryItems);
yeniMarkaModel.setAdapter(adapter);