【问题标题】:Sort Android apps alphabetically?按字母顺序对 Android 应用程序进行排序?
【发布时间】:2013-06-04 17:56:09
【问题描述】:

我有以下代码:

packageManager = getPackageManager();
    List<PackageInfo> packageList = packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
    List<PackageInfo> installedapps = new ArrayList<PackageInfo>();

    for(PackageInfo apps: packageList){
        if(!isSystemPackage(apps)){
            installedapps.add(apps);
        }
    }


   Collections.sort(installedapps, new Comparator<PackageInfo>(){
        public int compare(PackageInfo o1, PackageInfo o2) {
            return o1.packageName.compareTo(o2.packageName);
        }
    });



    apkList = (ListView) findViewById(R.id.listView);
    apkList.setAdapter(new AppInfoAdapter(this, installedapps, packageManager));

installedapps 是设备上所有应用程序减去系统应用程序的列表。我唯一想做的就是按字母顺序对它们进行排序,不太清楚如何。

【问题讨论】:

  • 在将列表传递给适配器之前对其进行排序。 blog.vogella.com/2009/08/04/collections-sort-java
  • 我只是对我正在比较的内容感到困惑,我使用了:Collections.sort(installedapps, new Compater 等。我感到困惑的是我应该比较什么两个 PackageInfo 对象

标签: android sorting arraylist


【解决方案1】:

据我了解,您想按名称的字母顺序对 PackageInfo 对象列表进行排序。我会开始here。您要做的是为您称为installedapps 的ArrayList 创建一个自定义比较器,然后使用Collections.sort(..) 进行排序。您应该用于排序的PackageInfo 的属性是p.packageName,这是应用程序的完全限定名称(您可以使用正则表达式来隔离包名称的最后一段)。您可以找到here 的一个隔离应用程序外观属性的示例。

【讨论】:

  • 按照建议添加了 Collections.sort(),这是我之前的想法,现在我更加确信我走在正确的轨道上,但这不起作用。是否有任何明显的错误,或者这是对的,我也许应该在别处寻找错误?
  • 知道了!我正在寻找比较 applicationInfo.loadLabel(getPackageManager()).toString() 而不是 .packageName
  • 请注意,如果您想比较 PackageInfo(如原始问题中所述)而不是 ApplicationInfo,那么我在这里的回答可能对您有用:stackoverflow.com/a/47198817/997940
【解决方案2】:

Android 提供了一个 ApplicationInfo.DisplayNameComparator 可以用于排序

List<ApplicationInfo>

查看:Alphabatize list of installed apps

【讨论】:

    猜你喜欢
    • 2013-11-09
    • 2023-03-08
    • 2011-08-29
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多