2017-07-05 7 views
1

Da Codename One eine Teilmenge der grundlegenden Java-Objektfunktionalität unterstützt, kann ich Vectors.sort() nicht verwenden, um meine Daten zu sortieren, bevor sie in ein DefaultListModel hinzugefügt werden. Wenn Sie nach anderen Sortieroptionen in Codename One suchen, habe ich das FilterProxyListModel gefunden.Beispiele für FilterProxyListModel in CodenameOne

Ich kann kein Beispiel finden, wie man das FilterProxyListModel richtig initialisiert, da es ein interessantes, aber kniffliges "Proxy" -Designmuster verwendet, mit dem ich nicht vertraut bin. Hier ist, wie ich es bisher implementiert habe, aber die Komponente zeigt keine Elemente im Simulator, wenn ich es so mache. Dies ist in der „initListModel ...“ Methode für meine Liste aus dem GUI-Builder:

protected boolean initListModelLearnableTopicsList(List cmp){ 

    Vector learnableListModel = new Vector; 
    //omitting initialization of learnableListModel as a Vector of HashTables with key/value pairs to display 
    ... 

    FilterProxyListModel<DefaultListModel> fpListModel = new FilterProxyListModel<DefaultListModel>(new DefaultListModel(learnableListModel)) { 
     @Override 
     protected int compare(Object a, Object b, boolean ascending) { 
      //details omitted... uses data in the LearnableListModel to provide sort order 
     } 

     @Override 
     protected boolean check(Object o, String str) { 
      //force all results to pass filter since original method fails when a Map object without a key of "name" is in the list 
      return true; 
     } 

    }; 

    fpListModel.sort(true); 

    cmp.setModel(fpListModel); 
} 

Bin ich etwas falsch hier? Gibt es da ein Beispiel, das ich als Anleitung für das richtige Vorgehen verwenden sollte?

+0

-Update empfehlen: Ich, dass ein Teil der Sortiermethode realisiert schließt alle Einträge, die Map-Objekte ohne „name“ sind Schlüssel mit einem String-Wert. es ist die Prüfmethode. Da ich nur die Sortier- und nicht die Filterfunktion von 'FilterProxyListModel' verwende, überschreibe ich die' check() 'Methode mit' return true; 'so dass alle Einträge den Filter passieren. Die Frage bleibt jedoch: Wo gibt es ein Referenzbeispiel für die Verwendung von FilterProxyListModel? wenn es noch keinen gibt, sollte es ... –

Antwort

0

können Sie Collections.sort(vector); verwenden das Filtermodell ist für Listenklassen, die wir wirklich nicht so viel https://www.codenameone.com/blog/avoiding-lists.html

+0

Danke Shai. Beeindruckend. Ich habe viel Zeit damit verbracht, einen Workaround zu entwickeln und im Entwicklerhandbuch zu jagen ... Wenn es eine durchsuchbare Version der JAvadocs gäbe, nach der ich nach dem Schlüsselwort "sort" suchen könnte, hätte ich das wahrscheinlich viel schneller gefunden. Irgendwelche Ratschläge für meine nächste Suche - wie man beginnt, um zu vermeiden, viel Zeit zu verschwenden? der Entwicklerführer hat es nicht behandelt (ich habe dort nach "sort" gesucht und hatte kein Glück). Das Finden von Beispielen und Schlüsselwörtern im Zusammenhang mit CN1 war bei mehreren Gelegenheiten sehr zeitaufwendig. Nicht zu kritisieren, aber vorzuschlagen, dass es die Adoption erleichtert, wenn es einfacher ist, das ist alles. –

+0

Diese https://www.codenameone.com/search.html sucht innerhalb der JavaDocs. Hier früh zu helfen hilft normalerweise. Schlimmstenfalls beantworten Sie Ihre eigene Frage und erhalten trotzdem Punkte ... –