2011-11-17 26 views
8

Hola, seguí el siguiente tutorial y enumeré con éxito todas mis aplicaciones instaladas en mi aplicación.Alphabatize lista de aplicaciones instaladas

List all installed apps in style

Sin embargo, no enumera alfabéticamente y no puedo encontrar la manera de ordenarlos de manera que sean. Cualquier ayuda con esto sería muy apreciada. He intentado un par de cosas como esta

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); 

Pero no puedo encontrar la manera de aplicarlo a los títulos de la lista de aplicaciones. Gracias por cualquier ayuda con este

=== === EDITAR

Gracias por la respuesta que hice la siguiente, pero tienen un error en especie. El error se lee "El método para ordenar (Lista, Comparador) En el tipo de colecciones no es aplicable a los argumentos (Lista, 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; 
    } 

Respuesta

13

Al consultar Android para obtener la lista de aplicaciones instaladas, obtendrá un List<ApplicationInfo>. Android proporciona una ApplicationInfo.DisplayNameComparator para aquellos:

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

(donde pm es una instancia de PackageManager).

+1

he editado mi anterior pero tengo un error. En mi clase no tengo nada acerca de List simplemente List ¿son lo mismo? – GFlam

+0

Esto solucionó dos problemas que tenía con mi cargador de aplicaciones AsyncTask. Gracias. –

+0

@ GFlam si desea ordenar PackageInfo en lugar de ApplicationInfo, consulte mi respuesta aquí: https://stackoverflow.com/a/47198817/997940 –

Cuestiones relacionadas