Autore Topic: ListView ondine alfabetico....  (Letto 945 volte)

Offline paul78

  • Utente normale
  • ***
  • Post: 357
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
ListView ondine alfabetico....
« il: 28 Agosto 2013, 11:26:06 CEST »
0
ciao a tutti!!!

per visualizzare la mia lista scrivo questo:
Codice (Java): [Seleziona]
...

ArrayList<HashMap<String, String>> contattiList =  controller.getAllContatti();

ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {

...

come faccio a visualizzare la lista del db in ordine alfabetico???


Post unito: 28 Agosto 2013, 11:50:24 CEST
tramite una vostra guida ho scritto questo:

Codice (Java): [Seleziona]
ArrayList<HashMap<String, String>> contattiList =  controller.getAllContatti();
                        Comparator<Contact> comparator = new Comparator<Contact>() {
                              @Override
                              public int compare(Contact obj1,Contact obj2) {
                                 return obj1.getNome().compareToIgnoreCase(obj2.getNome());
                              }
                        };
// Quì mi da errore!!!!
Collections.sort(contattiList,comparator);
                       
                        if(contattiList.size()!=0) {
                        ListView lv = getListView();
                        lv.setOnItemClickListener(new OnItemClickListener() {

come mai mi da errore???

« Ultima modifica: 28 Agosto 2013, 11:50:24 CEST da paul78, Reason: Merged DoublePost »
tutti possiamo programmare...basta volerlo!!!

Offline matttt

Re:ListView ondine alfabetico....
« Risposta #1 il: 28 Agosto 2013, 13:38:08 CEST »
0
Che errore ti da esattamente?
Che riporta il logcat?
Le mie apps su Google Play Store:

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:ListView ondine alfabetico....
« Risposta #2 il: 28 Agosto 2013, 16:43:34 CEST »
0
Dovresti fare qualcosa del genere:

Codice (Java): [Seleziona]
 private class userComparator implements Comparator<String>
         {
                 public int compare(String name1, String name2)
                 {
                       
                         return name1.compareTo(name2);
                 }
         }

e poi usare il comparatore così:

Codice (Java): [Seleziona]
Collections.sort(myArray,new userComparator());
Dimmi se funziona

Offline paul78

  • Utente normale
  • ***
  • Post: 357
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:ListView ondine alfabetico....
« Risposta #3 il: 28 Agosto 2013, 19:03:23 CEST »
0
ciao elfo!!!

mi da sempre errore...

come logcat non esce niente  ma quando passo il mouse sopra all'errore mi esce questo:

The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (ArrayList<HashMap<String,String>>, List.userComparator)

cosa significa???
tutti possiamo programmare...basta volerlo!!!

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:ListView ondine alfabetico....
« Risposta #4 il: 28 Agosto 2013, 20:40:50 CEST »
0
Ti da un errore sui generics. Scusa una cosa, stai creando un oggetto di tipo comparator per confrontate due elementi del tuo ArrayList. Come fai a comparare due elementi tramite nome se gli elementi del tuo arraylist sono hashMap? Non lo puoi fare. Puoi farlo se hai una cosa del genere ArrayList<String>. Se hai un ArrayList<HashMap<String,String>> significa che dovresti scrivere un comparatore che confronta due elementi del tuo ArrayList, in questo caso due HashMap. Ma se ci pensi un attimo, secondo quale criterio puoi ordinare delle hashMap? Non è molto logico...se provi a spiegare esattamente cosa vuoi fare, possiamo vedere se puoi utilizzare strutture dati diverse...magari + semplici.

Offline paul78

  • Utente normale
  • ***
  • Post: 357
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:ListView ondine alfabetico....
« Risposta #5 il: 28 Agosto 2013, 21:01:57 CEST »
0
...allora...stramite
ArrayList<HashMap<String, String>> contattiList =  controller.getAllContatti();   
ottengo una list....ma non in ordine alfabetico....

la vorrei in ordine alfabetico...semplice!!!!

tutti possiamo programmare...basta volerlo!!!

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:ListView ondine alfabetico....
« Risposta #6 il: 28 Agosto 2013, 21:15:30 CEST »
0
Secondo me puoi fare in due modi uno poco efficiente e l'altro ok:

1) invece di usare come elemento della lista un HashMap<String,String> puoi utilizzare direttamente ArrayList<String> e come elementi dell'ArrayList una stringa che contiene il nome e cognome. Quindi ogni elemento dell'array list sarà del tipo "giovanni rossi", "marco bianchi". Questa soluzione non è molto efficiente perchè non hai molto controllo sugli elementi della lista e se devi andare a fare qualche operazione specifica sugli elementi inizia a diventare complicato.

2) la soluzione che ti consiglio è questa:
invece di creare un comparatore per l'arraylist, puoi direttamente ordinare l'hashMap. Se gli elementi dell'hashmap sono Cognome,nome, puoi fare l'ordinamento per cognome. Fai quindi un'iterazione sulle chiavi e ordini. Se vuoi usare un comparatore puoi utilizzare un TreeMap e passargli come argomento nel costruttore il comparatore che crei. Dai un'occhiata qui http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java.
Fammi sapere se riesci.

Offline paul78

  • Utente normale
  • ***
  • Post: 357
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:ListView ondine alfabetico....
« Risposta #7 il: 28 Agosto 2013, 21:17:47 CEST »
0
...tramite il tuo aiuto ho capito il problema!!!

ho scritto semplicemente:

Codice (Java): [Seleziona]
ArrayList<HashMap<String, String>> contattiList =  controller.getAllContatti();
                        Collections.sort(contattiList,new Comparator<HashMap<String,String>>(){
                            public int compare(HashMap<String,String> mapping1,HashMap<String,String> mapping2){
                                return mapping1.get("nome").compareTo(mapping2.get("nome"));
                            }
                        });

in questo modo mi esce in ordine alfabetico!!!

grazie ancora a tutti!!!
tutti possiamo programmare...basta volerlo!!!

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:ListView ondine alfabetico....
« Risposta #8 il: 28 Agosto 2013, 21:24:05 CEST »
0
Bravo, però ti conviene ordinare per cognome e non per nome :)

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:ListView ondine alfabetico....
« Risposta #9 il: 28 Agosto 2013, 22:43:57 CEST »
0
quoto elfo :) cmq penso che esistono dei metodi di sort più semplici da usare, se ti interessa prova a cercare!!
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline matttt

Re:ListView ondine alfabetico....
« Risposta #10 il: 29 Agosto 2013, 08:27:50 CEST »
0
Attenzione che HashMap non è una struttura ordinata (HashMap | Android Developers)
Usate LinkedHashMap piuttosto.

Oppure anche il punto 1 suggerito da elfo più sopra - che puoi anche espandere mettendo un separatore tipo tab "\t" ed estrapolare facilmente i 2 campi da una sola stringa con split()
Le mie apps su Google Play Store: