Как отсортировать элемент RecyclerView в android
Я работаю над приложением для чата Android. Когда я вызываю API, он возвращает мне список чатов, отсортированный по user_id. Но то, что мне нужно сделать, это сериализовать message_id, так как я хочу показать последнее сообщение первым. Вот мой метод onBindViewHolder, в котором я получаю значения.
public void onBindViewHolder(final MyAdapter_HomeViewHolder holder, final int position) {
holder.userNameTV.setText(data.get(position).getUserInfo().getFullName());
holder.msgBodyTV.setText(data.get(position).getBody());
holder.originator_iD.setText(data.get(position).getUserInfo().getId().toString());
//message ID. I need to serialize my recyclerView by this ID.biggest id should appear first.
holder.messageId.setText(data.get(position).getId().toString());
holder.owner_type_ET.setText("1");
holder.subject_ET.setText("Message");
}
В случае, если вам нужно увидеть полный код, https://pastebin.com/Zxmq36Gn
Ответы
Ответ 1
попробуйте это, прежде чем передавать свой список адаптеру (после вызова API и до уведомления адаптера):
Collections.sort(data, new Comparator<CustomData>() {
@Override
public int compare(CustomData lhs, CustomData rhs) {
// -1 - less than, 1 - greater than, 0 - equal, all inversed for descending
return lhs.getId() > rhs.getId() ? -1 : (lhs.customInt < rhs.customInt ) ? 1 : 0;
}
});
Ответ 2
Collections.sort(response.body(), new Comparator<All_posts>() {
@Override
public int compare(All_posts lhs, All_posts rhs) {
if(lhs.getId() > rhs.getId()) {
return -1;
} else {
return 1;
}
}
});
-
"response.body" - это массив, который я получил от json, это то, что я передаю адаптеру представления переработчика,
-
"All_posts" - это класс "Model", который содержит только поля;
-
И getId - это значение, которое я хочу сравнить с ним, из моего модельного класса,
Я написал это прежде, чем я установил свой адаптер в мое представление переработчика. и после того, как я установил свой adpater в свой recyclerView, я написал recyclerView.getAdapter().notifyDataSetChanged();
Ответ 3
Перед передачей данных в адаптер RecyclerView
data.sort(new Comparator<Datum>() {
@Override
public int compare(Datum o1, Datum o2) {
return o1.get(position).getMessageId().compareTo(o2.get(position).getMessageId());
}
});
затем передать (уведомить) отсортированный список адаптеру.
Ответ 4
Добавьте эти строки кода перед передачей в RecyclerView Adapter
Collections.sort(yourLists, new Comparator<YourList>() {
@Override
public int compare(YourList lhs, YourList rhs) {
return lhs.getId().compareTo(rhs.getId());
}
});
Ответ 5
в Kotlin используйте вот так после загрузки данных в массив:
myItems.sortWith(Comparator { lhs, rhs ->
// -1 - less than, 1 - greater than, 0 - equal, all inversed for descending
if (lhs.name > rhs.name) -1 else if (lhs.id < rhs.id) 1 else 0
})
После этого применяются:
myItemAdapter.notifyDataSetChanged()