Je travaille sur une application de chat Android. Lorsque j'ai appelé mon api, il me renvoie la liste de discussion triée par un user_id. Mais ce que je dois faire est sérialisé par message_id car je veux montrer le dernier message en premier. Voici ma méthode onBindViewHolder dans laquelle je récupère les valeurs.
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");
}
Si vous avez besoin de voir le code complet, https://Pastebin.com/Zxmq36Gn
essayez ceci avant de transmettre votre liste à l'adaptateur (après l'appel de l'API et avant l'adaptateur 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;
}
});
Avant de transmettre les données à l'adaptateur RecyclerView
data.sort(new Comparator<Datum>() {
@Override
public int compare(Datum o1, Datum o2) {
return o1.get(position).getMessageId().compareTo(o2.get(position).getMessageId());
}
});
puis passez (notifiez) la liste triée à l'adaptateur.
Ajoutez ces lignes de code avant de passer à RecyclerView Adapter
Collections.sort(yourLists, new Comparator<YourList>() {
@Override
public int compare(YourList lhs, YourList rhs) {
return lhs.getId().compareTo(rhs.getId());
}
});
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" est l'arraylist que j'ai reçu de json, c'est ce que je passe. "
"All_posts" est la classe "Model", celle qui ne contient que des champs;
Et getId est la valeur que je veux que la comparaison ait lieu, elle provient de ma classe de modèle,
Je l'ai écrit avant de configurer l'adaptateur sur la vue Recycler ..__ et après avoir défini l'adaptateur sur RecyclerView, j'ai écrit recyclerView.getAdapter().notifyDataSetChanged();