2011-11-17 80 views
8

嗨,我遵循以下教程,併成功地列出了我的應用程序中的所有安裝的應用程序。Alphabatize安裝的應用程序列表

List all installed apps in style

但是它不會列出按字母順序,我無法弄清楚如何對它們進行排序,使他們。任何幫助,這將不勝感激。我試過這樣幾件事

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

但無法弄清楚如何將它應用到應用列表標題。感謝您對本

===編輯===

任何幫助,感謝您對我做了如下的答覆,但對排序錯誤。錯誤讀取「在類型集合的方法排序(名單,比較器)是不適用的參數(列表,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; 
    } 

回答

13

當您查詢的Android讓安裝的應用程序的列表,你將獲得List<ApplicationInfo>。機器人提供那些的ApplicationInfo.DisplayNameComparator

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

(其中pmPackageManager一個實例)。

+1

我編輯了我的上面,但有錯誤。在我的班級裏我沒有任何關於List 的列表他們差不多嗎? – GFlam

+0

這解決了我在使用AsyncTask App加載器時遇到的兩個問題。謝謝。 –

+0

@GFlam如果您想對PackageInfo進行排序而不是ApplicationInfo,請在此處查看我的答案:https://stackoverflow.com/a/47198817/997940 –