搜索后排序分类

时间:2013-06-20 20:16:34

标签: android sorting actionbarsherlock

我用ListView和ActionBarSharlock(ABS)编写了一个简单的应用程序。我有我的对象,自定义ArrayAdapter,在我的ABS我有SearchView和下拉列表,现在关于我的问题,如果我在搜索之前搜索所有工作正常,但在“搜索”之后排序函数被打破。

    public boolean onNavigationItemSelected(int position, long itemId) {
                        switch (position) {
                        case 0:
                            countryArrayAdapter.sort(new SortByAZ());
                            break;
                        case 1:

...................


        SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
            public boolean onQueryTextChange(String newText) {
                countryArrayAdapter.getFilter().filter(newText);
                return true;
            }

我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

我做错了什么?

无。问题是ArrayAdapter是错误的。

API ArrayAdapter实施的相关代码:

public void sort(Comparator<? super T> comparator) {
    synchronized (mLock) {
        if (mOriginalValues != null) {
            Collections.sort(mOriginalValues, comparator);
        } else {
            Collections.sort(mObjects, comparator);
        }
    }
    if (mNotifyOnChange) notifyDataSetChanged();
}

public T getItem(int position) {
    return mObjects.get(position);
}

正如您所看到的,它有时会对不同的列表进行排序。实际上,在您第一次过滤它之后,mOriginalValues变为非空。

有一种解决方法。每次更改(排序,插入等)到列表后,您必须使用相同的文本值再次过滤它。

我始终建议不要使用ArrayAdapter,而是在需要时使用您自己的BaseAdapter版本构建Filter

修改

刚刚发现这已经是几年已知的问题了:http://code.google.com/p/android/issues/detail?id=9666