2017-07-12 9 views
-1

Ich entwickle eine Nachrichten-App, die es besteht aus:Sortieren Arraylist Elemente anzuzeigen nach Datum

Titel, Beschreibung, Uhrzeit, Datum

Das Datumsformat ist als: 12/7/2017

Wenn ich Multiple News hinzufüge, werden sie zufällig in der Recycleransicht angezeigt.

Was ist der beste Weg, Comparator-Objekt zu verwenden, um die Arraylist nach Datum zu sortieren, wenn ich also eine Nachricht hinzufüge, muss sie in recyclerview top angezeigt werden.

Das ist mein Arbeitscode:

JSONArray array = new JSONArray(response); 
      JSONObject jsonObject = null; 
      post_array2.clear(); 
      Simplenews_data p; 
      for (int i = 0; i < array.length(); i++) { 
       jsonObject = array.getJSONObject(i); 

       int id_simplenews = jsonObject.getInt("id_simplenews"); 
       String name_simplenews = jsonObject.getString("name_simplenews"); 
       String image_simplenews = jsonObject.getString("image_simplenews"); 
       String desc_simplenews = jsonObject.getString("desc_simplenews"); 
       String time_simplenews = jsonObject.getString("time_simplenews"); 
       String date_simplenews = jsonObject.getString("date_simplenews"); 



       p = new Simplenews_data(); 
       p.setId_simplenews(id_simplenews); 
       p.setName_simplenews(name_simplenews); 
       p.setImage_simplenews(image_simplenews); 
       p.setDesc_simplenews(desc_simplenews); 
       p.setTime_simplenews(time_simplenews); 
       p.setDate_simplenews(date_simplenews); 

       post_array2.add(p); 

ich gesucht habe und diesen Code gefunden, der für andere Ausgabe funktioniert, wenn u zwei ganzen Zahlen vergleichen haben:

Collections.sort(post_array, new Comparator<Standings_data>(){ 
       public int compare(Standings_data s1, Standings_data s2) { 
        return s1.getPts().compareToIgnoreCase(s2.getPts()); 
       } 
      }); 

Aber wirklich t‘i don habe eine Idee, wie man es nach diesem Datumsformat sortiert, also wenn eine Nachricht kommt, zeigt es sich oben in der Recycleransicht nicht zufällig.

Dies ist eine einfache Screenshot der aktuellen Situation:

enter image description here

+2

sortieren Erstellen Sie ein Date-Objekt aus der Zeichenfolge mit einer SimpleDateFormat.parse() und verwenden Sie dann die Methode compareTo von Datum. – Vucko

+0

Würdest du bitte einen Code schreiben –

+0

würde ich nicht. Du könntest einfach googeln für das was ich gesagt habe und finde die Antwort einfach. Aber es wäre dir lieber, wenn jemand alles für dich tun würde. Dafür gibt es auch Sites, aber Sie müssen normalerweise bezahlen. Prost. – Vucko

Antwort

1

Extract Jahr, Monat und Tag von Ihrem String spliting:

String[] parts = date.split("/");

in ganzen Zahlen konvertieren dann vergleichen Jahr, Monat und Tag.

Sollte funktioniert.

(Vucko Antwort ist besser, wenn Sie mit Simple analysieren kann)

+0

Wenn ich das getan habe, wie kann ich die Recyclerview zeigt die Elemente durch das Vergleichsdatum? –

+0

Nun, die RecyclerView zeigt die Elemente in der gleichen Reihenfolge wie die ArrayList. Sortieren Sie die ArrayList, bevor Sie sie anzeigen, oder rufen Sie die Funktion "notifyDataSetChanged" auf, sobald die ArrayList sortiert ist. – Sigma

1

Sie könnten die String s Date s konvertieren wie Vucko empfiehlt, oder Sie können die Daten zu ISO 8601 Format und sortieren sie alphabetisch konvertieren.

ISO 8601 sieht wie YYYY-mm-dd aus, also sortiert man diese als Strings alphabetisch nach Jahr, Monat und Tag, wodurch die Strings chronologisch sortiert werden.

isodate = date.subString(5) + date.subString(0,2) + date.substring(3,4) Dies wird Sie mit einem Randfall von Daten mit 1 oder 2 Zahlen (7 vs 17) verlassen, aber das sollte Sie hoffentlich ermutigen, ein besseres Datumsformat zu verwenden. Sie können herausfinden, wie Sie die ArrayList hier Sorting a collection of objects

+0

Zeig mir bitte einen Code –

+0

Ich habe einen Code gepostet –