2012-11-17 24 views
4

我已经扩展了我的自定义类的ArrayAdapter。我的课程覆盖toString()并返回我想用于搜索查询的字段。ArrayAdapter股票过滤显示错误的元素

这是我的过滤代码:

productItemAdapter.getFilter().filter(filterText.toLowerCase());

这是我toString()代码:

return name.toLowerCase();

筛选工作(返回正确的元素数),但它的错误的元素。它始终显示列表上的第一个元素,而不是匹配的搜索...

+0

不要害怕发布适配器的代码。 – Luksprog

回答

10

我有完全相同的问题,我会假设(像我一样),你没有阅读文档时尝试执行这个。

我正在将我的对象数组传递给ArrayAdapter,随后将数组传递给超级构造函数。

我犯的错误是:我存储到传入阵列和使用阵列绘制在getView()方法的项目的引用:

public SimpleAdapter(Context context, List<MyType> values) 
{ 
    super(context, R.layout.rowlayout, values); 
    this.context = context; 
    this.values = values; 
} 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
    // ... 
    MyType myType = values.get(position); 
    // ... 
    } 

应该所做的叫做ArrayAdapter类上的getItem()例如

MyType myType = getItem(position); 

哪个固定它美观,事后很明显。

- (e)

+0

感谢您的解决方案!在实现自定义适配器时扩展ArrayAdapter并使用SearchView进行过滤。 –