2017-08-21 56 views
1

私はアンドロイドチャットアプリケーションに取り組んでいます。私は私のAPIを呼び出すと私にuser_idでソートされたチャットリストを返します。しかし、私は最後のメッセージを最初に表示したいので、message_idによってシリアル化されています。私の値はonBindViewHolderメソッドです。 RecyclerViewアダプタアンドロイドのRecyclerViewアイテムをソートする方法

data.sort(new Comparator<Datum>() { 
      @Override 
      public int compare(Datum o1, Datum o2) { 
       return o1.get(position).getMessageId().compareTo(o2.get(position).getMessageId()); 
      } 
     }); 

にデータを渡す前に、あなたの場合は

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

+0

あなたはシリアル化や並べ替えを意味するのですか?私はあなたがリサイクラビューを使用していると仮定しているので、あなたが何をする必要があるか(あなたがソートを意味すると仮定して)新しい項目が追加されたときにリストをソートしてから、アダプタで "notifyDataSetChanged()"を呼び出します。これは、リサイクラビューでオブジェクトのコンパレータ関数を実装することで実行できます。ソート方法は[こちらを参照](https://stackoverflow.com/questions/5805602/how-to-sort-list-of-objects-by-some-property) – swerly

+0

はい、私はmessage_idで短絡していることを意味します。上部に最大のmessage_idを表示する必要があります。 notifyDataSetChanged()はいつものように私のuser_idを返しています。 –

+0

あなたのリストをソートする方法について投稿したリンクを確認してください。あなたはメンバ変数として設定する前に、あなたのコンストラクタでは、リストを並べ替えることができます。 '公共MyAdapter_home(一覧データ、int型rowLayout、コンテキストコンテキスト){ここ this.data =データ //ソートデータを、 this.rowLayout = rowLayout; this.context = context; } ' – swerly

答えて

1

は、(API呼び出しの後と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; 
      } 
     }); 
+0

と表示されます。多くのエラーが表示されます。あなたは私にしたがって私のコードを教えてください。 –

+0

完璧に動作します。どうもありがとう –

0

その後、(通知)アダプタにソートされたリストを渡します。

+0

data.sortが機能していません。それはAPIの使用は@since 1.8 + –

+0

と書かれています。@Sanat Chandravanshiの答えは –

関連する問題