2016-09-10 31 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

相关问题