2013-06-20 97 views
-1

我用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

我做錯了什麼?

什麼都沒有。問題是ArrayAdapter是越野車。從API 17執行的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); 
} 

正如你所看到的,有時不同的排序名單。實際上,在您第一次過濾之後,變爲非空。

有一個解決方法。每次更改(排序,插入等)到列表中後,都必須再次使用相同的文本值進行過濾。

我總是建議不要使用ArrayAdapter,而是建立在BaseAdapter與您自己的Filter實施需要時。

編輯:

剛剛發現這幾年已經是一個已知的問題:http://code.google.com/p/android/issues/detail?id=9666