2016-09-10 42 views
2

我在排序RecyclerView項目時遇到了不同類型的問題。例如,我有這樣的RecyclerView.Adapter如何對不同類型的RecyclerView元素進行排序?

public class StudyRVadapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ 

private List<Item> data; 

public RVadapter(List<Item> src){ 
    data = src; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view; 
    RecyclerView.ViewHolder vh; 

    switch (viewType){ 
     case 0: 
      view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_0, parent, false); 
      vh = new ViewHolderZero(view); 
      break; 

     case 1: 
      view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_1, parent, false); 
      vh = new ViewHolderOne(view); 
      break; 

     default: vh=null; 
    } 
    return vh; 
} 

@Override 
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 

    if (Item0.class.isInstance(data.get(position))){ 
     Item0 item0 = (Item0)data.get(position); 
     ((ViewHolderZero)holder).text.setText(item0.toStringText()); 
     } 
    if (Item1.class.isInstance(data.get(position))){ 
     Item1 item1 = (Item1)data.get(position); 
     ((ViewHolderOne)holder).text.setText(item1.toStringText()); 
    }  
} 

@Override 
public int getItemViewType(int position) throws IllegalArgumentException { 
    Item item = data.get(position); 
    if (Item0.class.isInstance(item)) return 0; 
    if (Item1.class.isInstance(item)) return 1; 
    throw new IllegalArgumentException("Unknown element"); 
} 

@Override 
public int getItemCount() { 
    return data.size(); 
} 

public class ViewHolderZero extends RecyclerView.ViewHolder{ 

    TextView text; 

    public ViewHolderZero(View itemView) { 
     super(itemView); 
     text = (TextView)itemView.findViewById(R.id.tvItem0); 

    } 
} 

public class ViewHolderOne extends RecyclerView.ViewHolder { 
    TextView text2; 

    public ViewHolderOne(View itemView) { 
     super(itemView); 
     text = (TextView)itemView.findViewById(R.id.tvItem1); 
    } 
} 

在我的主要Activity我創建LinkedList與類型 「Item0」 和 「項目1」 添加元素:

LinkedList<Item> ll = new LinkedList<>(); 
ll.add(0, new Item0("abc")); 
ll.add(1, new Item1("bca")); 

我試圖用Comparator

class Comparation implements Comparator<Item> { 

    public int compare(Item0 lhs, Item1 rhs) { 

     if (lhs.getText() < rhs.getText()){ 
      return 1; 
     }else return -1; 
    } 
} 

但它不起作用,因爲在compare()錯誤的參數。

如果我理解正確,我可以使用Collections.sort()Comparator作爲列表,它由相同類型的元素組成。但是,我怎樣才能排序不同類型的元素?

回答

2

您可以製作Item0Item1的子類Item(如果它們尚未)。

getText()應該是Item(其中Item1Item2將繼承)的方法。

之後,你就可以正確地對它們進行比較,因爲它們是同一類型:

class Comparation implements Comparator<Item> { 

    public int compare(Item lhs, Item rhs) { 
     // your comparation logic 
    } 
} 
+2

作爲獎勵:如果'的getText()'返回一個字符串(或有一個'的toString()')方法,你也可以這樣做:'return lhs.getText()。compareTo(rhs.getText())' – Aystub

相關問題