2015-09-07 55 views
2

我的SortedListRecyclerView顯示爲我的RecyclerView.AdapterAndroid appcompat`SortedList`的度假村?

我使用2個自定義Comparator實例,使用SortedListAdapterCallback.compare()方法對A-Z或Z-A進行排序。

static class A2Z implements Comparator<Item> { 
    @Override 
    public int compare(Item t0, Item t1) { 
     return t0.mText.compareTo(t1.mText); 
    } 
} 
static class Z2A extends A2Z { 
    @Override 
    public int compare(Item t0, Item t1) { 
     return -1 * super.compare(t0, t1); 
    } 
} 

Item只包含一個String mText;


我用我的比較在SortedListAdapterCallback.compare()方法:

private Comparator<Item> a2z = new A2Z(); 
private Comparator<Item> z2a = new Z2A(); 
private Comparator<Item> comparator = z2a; 

     @Override 
     public int compare(Item t0, Item t1) { 
      return comparator.compare(t0, t1); 
     } 

我改變一個按鈕,按比較。屏幕上的列表不會更新。

在各種方法中記錄值之後,我可以告訴列表本身沒有更新。通知適配器的更改只需重新繪製舊列表,而不必訴諸它。

那麼我該如何強制底層SortedList去度假所有的項目?

也許最好是隻需要創建一個新的Adapter每一次,在這個問題:

回答

1

SortedList不具備的功能訴諸本身 - 每個實例只有一個排序。

去與創建每個度假村一個新的適配器,爲每Yigit's answer to the above referenced question

如果你在你的適配器穩定的ID,你可以得到相當不錯的 結果(動畫),如果你創建一個包含一個新的數組該過濾 項目,並呼籲

recyclerView.swapAdapter(newAdapter, false); 

使用swapAdapter暗示RecyclerView,它可以重複使用視圖持有人。 (與setAdapter相比,它必須回收所有視圖並重新創建,因爲 它不知道新適配器與舊適配器設置的 具有相同的ViewHolder)。