1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Arraylist in verschiedene Kategorien sortieren

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von DeNiXP, 27.06.2011.

  1. DeNiXP, 27.06.2011 #1
    DeNiXP

    DeNiXP Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    27.06.2011
    Hallo,

    ich hab ein Problem mit der Sortierung von einer Arrayliste.

    Ich habe eine XML Datei die ich geparst habe und mir den Titel, das Datum und die Beschreibung in ein Textview auslesen lasse.

    Das Sortieren nach dem Titel funktioniert problemlos, jedoch möchte ich jetzt gern die Arraylist nach Datum und der Bescheibung sortieren.

    Kann mir jemand helfen ? Wie kann ich die Daten so sortieren, dass der Aufbau bei der Anzeige, die selbe bleibt ?

    Hier ist mein bisheriger Code..

    Code:
     
    [SIZE=2][COLOR=#7f0055][B][SIZE=2][COLOR=#7f0055]private[/COLOR][/SIZE][/B]
    [LEFT][/COLOR][/SIZE][SIZE=2]List<RSSItem> [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]items[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
    
    [SIZE=2][COLOR=#646464][SIZE=2][COLOR=#646464]@Override[/COLOR][/SIZE][/COLOR][/SIZE]
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]public[/COLOR][/SIZE][/COLOR][/SIZE][/B][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]void[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] onCreate(Bundle savedInstanceState) {[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]super[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].onCreate(savedInstanceState);[/SIZE]
    [SIZE=2]setContentView(R.layout.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]main[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]);[/SIZE]
    [SIZE=2]loadFeed();[/SIZE][/LEFT]
    [/LEFT]
    
     
    
    [LEFT][SIZE=2]} [/SIZE]
    [LEFT][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]// XML [U]Parsen[/U][/COLOR][/SIZE][/COLOR][/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]private[/COLOR][/SIZE][/COLOR][/SIZE][/B][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]void[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] loadFeed() {[/SIZE][/LEFT]
    [/LEFT]
    
     
    
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] {[/SIZE]
    [LEFT][SIZE=2]FeedParser parser = [/SIZE][/LEFT]
    [/LEFT]
    
     
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] FeedParser([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].getResources().getXml(R.xml.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]badeseenliste[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]));[/SIZE]
    
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]long[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] start = System.[I]currentTimeMillis[/I]();[/SIZE]
    [LEFT][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]items[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = parser.parse();[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]long[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] duration = System.[I]currentTimeMillis[/I]() - start;[/SIZE]
    [SIZE=2]Log.[I]i[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"SeenAtlas"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Parser duration="[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] + duration);[/SIZE]
    [SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//pubDate[/COLOR][/SIZE][/COLOR][/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]final[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] List<String> titles = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ArrayList<String>([/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]items[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].size());[/SIZE][/LEFT]
    [/LEFT]
    
     
    
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]final[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] RSSItem item : [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]items[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) {[/SIZE]
    [LEFT][SIZE=2]titles.add(item.getTitle() + [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"\n"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] + item.getDescription() + [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]" \t ("[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] + item.getPubDate()+ [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]")"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE][/LEFT]
    [/LEFT]
    
     
    
    [LEFT][SIZE=2]Collections.[I]sort[/I](titles);[/SIZE][/LEFT]
    
     
    
    [LEFT][SIZE=2]}[/SIZE][/LEFT]
    
     
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].setListAdapter([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ArrayAdapter<String>([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2], R.layout.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]row[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2], titles));[/SIZE]
    [SIZE=2]}[/SIZE][/LEFT]
    
    Danke im vorraus :)
     
  2. DieGoldeneMitte, 27.06.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Ich verstehe dein "Array umsortieren ohne die Anzeige zu ändern"-Teil nicht so ganz.
    Soll sich die Reihenfolge der Items nun ändern oder nicht?

    Eine Möglichkeit wäre Collections.sort(List,Comparator) mit einem geeigneten Comparator für deine Strings.

    Dort müsstest du dann das Datum aus dem String wieder heraus parsen.

    Eleganter wäre deshalb, wenn du direkt "items" und nicht nur die Stringabklatsche nutztest.
    Dann kannst du in dem Comparator einfach an das gewünschte Feld delegieren.
     
  3. DeNiXP, 27.06.2011 #3
    DeNiXP

    DeNiXP Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    27.06.2011
    Hallo, danke für Ihre schnelle Antwort

    Ich möchte die Arrayliste normal sortieren:

    1. nach Titel
    2. nach Datum
    3. nach Beschreibung

    Jeder Datensatz in der Arrayliste verfügt über ein Titel, Beschreibung und Datum.

    der Aufbau wie die Daten aber angezeigt werden sollen, soll weiterhin wie folgt aussehn:
     
  4. Fr4gg0r, 27.06.2011 #4
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    new Comparator<deinObjekt>{
    public int compare(deinObjekt1, deinObjekt2){
    int result = deinObjekt1.titel.compareTo(deinObjekt2.titel);
    if(result!=0)return result;
    result = deinObjekt1.datum.compareTo(deinObjekt2.datum);
    ...
    }
    }
    Datum kannste auch schneller als int vergleichen
     

Diese Seite empfehlen