Как сортировать элементы RecyclerView разных типов?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как сортировать элементы RecyclerView разных типов?

Сообщение Anonymous »

У меня проблема с сортировкой элементов RecyclerView разных типов. Например у меня есть такой RecyclerView.Adapter:

Код: Выделить всё

public class StudyRVadapter extends RecyclerView.Adapter{

private List data;

public RVadapter(List 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);
}
}
В моей основной деятельности я создаю LinkedList и добавляю элементы с типами «Item0» и «Item1»:

Код: Выделить всё

LinkedList ll = new LinkedList();
ll.add(0, new Item0("abc"));
ll.add(1, new Item1("bca"));
Я пытался использовать Компаратор:

Код: Выделить всё

class Comparation implements Comparator {

public int compare(Item0 lhs, Item1 rhs) {

if (lhs.getText() < rhs.getText()){
return 1;
}else return -1;
}
}
Но это не работает из-за неправильных аргументов в функции сравнения().
Если я правильно понимаю, я могу использовать Коллекции .sort() и Comparator для списка, состоящего из элементов одного типа. Но как сортировать элементы разного типа?

Подробнее здесь: https://stackoverflow.com/questions/394 ... rent-types
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»