如何使用不同类型对RecyclerView元素进行排序?

时间:2016-09-10 13:12:11

标签: android sorting android-recyclerview

我对使用不同类型的RecyclerView项进行排序时遇到问题。例如,我有RecyclerView.Adapter

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并添加类型&#34; Item0&#34;和&#34; Item1&#34;:

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()中的错误args,它无法正常工作。

如果我理解正确,我可以使用Collections.sort()Comparator作为列表,它由相同类型的元素组成。但是我如何对不同类型的元素进行排序呢?

1 个答案:

答案 0 :(得分:2)

您可以制作Item0的{​​{1}}和Item1子类(如果它们尚未存在)。

Item应该是getText()的方法(ItemItem1会继承)。

之后,您可以正确比较它们,因为它们属于同一类型:

Item2