2011-11-17 13 views
8

Ciao Ho seguito il tutorial qui sotto e elencato con successo tutte le mie app installate nella mia applicazione.Alphabatize elenco di app installate

List all installed apps in style

Tuttavia non elenca in ordine alfabetico di loro e non riesco a capire come ordinarli in modo che siano. Qualsiasi aiuto con questo sarebbe molto apprezzato. Ho provato un paio di cose come questa

class IgnoreCaseComparator implements Comparator<String> { 
      public int compare(String strA, String strB) { 
       return strA.compareToIgnoreCase(strB); 
      } 
     } 
     IgnoreCaseComparator icc = new IgnoreCaseComparator(); 
     java.util.Collections.sort(SomeArrayList,icc); 

Ma non riesco a capire come applicare ai titoli della lista app. Grazie per tutto l'aiuto con questo

=== === EDIT

Grazie per la risposta che ho fatto la seguente, ma hanno un errore sorta. L'errore si legge "Il metodo sort (List, comparatore) nel tipo collezioni non è applicabile per gli argomenti (List, ApplicationInfo.DisplayNameComparator)"

private List<App> loadInstalledApps(boolean includeSysApps) { 
     List<App> apps = new ArrayList<App>(); 

     PackageManager packageManager = getPackageManager(); 

     List<PackageInfo> packs = packageManager.getInstalledPackages(0); 

     for(int i=0; i < packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     ApplicationInfo a = p.applicationInfo; 
     if ((!includeSysApps) && ((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1)) { 
      continue; 
     } 
     App app = new App(); 
     app.setTitle(p.applicationInfo.loadLabel(packageManager).toString()); 
     app.setPackageName(p.packageName); 
     app.setVersionName(p.versionName); 
     app.setVersionCode(p.versionCode); 
     CharSequence description = p.applicationInfo.loadDescription(packageManager); 
     app.setDescription(description != null ? description.toString() : ""); 
     apps.add(app); 
     } 
     Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(packageManager)); 
     return apps; 
    } 

risposta

13

Quando si esegue una query di Android per ottenere l'elenco delle applicazioni installate, si Otterrà un List<ApplicationInfo>. Android fornisce un ApplicationInfo.DisplayNameComparator per chi:

Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(pm)); 

(dove pm è un'istanza di PackageManager).

+1

ho modificato il mio sopra ma ho un errore. Nella mia classe non ho nulla su List solo Elenco sono circa lo stesso? – GFlam

+0

Questo ha risolto due problemi che avevo con il mio caricatore di app AsyncTask. Grazie. –

+0

@GFlam se si desidera ordinare PackageInfo anziché ApplicationInfo, vedere la mia risposta qui: https://stackoverflow.com/a/47198817/997940 –

Problemi correlati