gpt4 book ai didi

android - AutoCompleteTextView 过滤问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:24 28 4
gpt4 key购买 nike

我有一个AutoCompleteTextView 和一个自定义 AutoCompleteTextView 适配器。

我的列表有 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);

最佳答案

在返回结果之前,您必须将过滤的项目数分配给 FilterResults.count。文本控件为下拉菜单分配了这么多行。

原因是 AutoCompleteTextView 从不直接使用 values 字段,而是要求您的 Adapter 获取具有特定值的项目指数。例如,这使得始终将整个项目集合传递给 values 但仅从 Adapter.getItem() 返回其中的一些成为可能。

关于android - AutoCompleteTextView 过滤问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6570764/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com