web-dev-qa-db-fra.com

Comment trier l'objet RecyclerView dans Android

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

8
Tanvir Durlove

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;
            }
        });
8
Sanat Chandravanshi

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.

0
Ramees Thattarath

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());
        }
    });
0
Pratik Gautam
 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();

0
Hossein