How to sort RecyclerView item in android
Solution 1
try this before passing your list to the adapter (after API call and before adapter notifydatasetchanged):
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;
}
});
Solution 2
in Kotlin use like this after loading data in array:
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
})
After that apply:
myItemAdapter.notifyDataSetChanged()
Solution 3
Before passing the data to RecyclerView
adapter
data.sort(new Comparator<Datum>() {
@Override
public int compare(Datum o1, Datum o2) {
return o1.get(position).getMessageId().compareTo(o2.get(position).getMessageId());
}
});
then pass (notify) the sorted list to the adapter.
Solution 4
Add this lines of code before passing to RecyclerView Adapter
Collections.sort(yourLists, new Comparator<YourList>() {
@Override
public int compare(YourList lhs, YourList rhs) {
return lhs.getId().compareTo(rhs.getId());
}
});
Solution 5
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" is the arraylist I got from json, this is what I pass to the recycler view adapter,
"All_posts" is the "Model" class, the one which contains only fields;
And getId is the value I want comparison to take place on it, it's from my model class,
I wrote this before I set my adapter to my recycler view.
and after I set my adpater to my recyclerView, I wrote recyclerView.getAdapter().notifyDataSetChanged();
Tanvir Durlove
Updated on February 16, 2022Comments
-
Tanvir Durlove over 2 years
I'm working on a android chatting application. When I called my api it returns me the chat list sorted by a user_id. But what I need to do is serialized by message_id as I want to show last message first.Here is my onBindViewHolder method in which i get the values.
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"); }
In case of you need to see the full code, https://pastebin.com/Zxmq36Gn