我在对不同类型的
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
并添加类型为“Item0”和“Item1”的元素:
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
来表示列表,它由相同类型的元素组成。但是如何对不同类型的元素进行排序呢?
您可以创建
Item0
和 Item1
Item
的子类(如果还没有)。
getText()
应该是 Item
的方法(Item1
和 Item2
将继承)。
之后,您可以正确比较它们,因为它们是同一类型:
class Comparation implements Comparator<Item> {
public int compare(Item lhs, Item rhs) {
// your comparation logic
}
}