按应用名称而不是包名称按字母顺序对列表视图进行排序

时间:2012-07-23 17:41:19

标签: android listview sorting

我正在尝试使用此ListView,我正在尝试按应用程序名称而不是包名称按字母顺序对列表进行排序。

MainActivity.java

// load list application
mListAppInfo = (ListView)findViewById(R.id.lvApps);
// create new adapter
AppInfoAdapter adapter = new AppInfoAdapter(this, Utilities.getInstalledApplication(this), getPackageManager());
// set adapter to list view        
mListAppInfo.setAdapter(adapter);

AppInfoAdapter.java

public AppInfoAdapter(Context c, List list, PackageManager pm) {
    mContext = c;
    mListAppInfo = list;
    mPackManager = pm;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // get the selected entry
    ApplicationInfo entry = (ApplicationInfo) mListAppInfo.get(position);

    // reference to convertView
    View v = convertView;

    // inflate new layout if null
    if(v == null) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        v = inflater.inflate(R.layout.layout_appinfo, null);
    }

    // load controls from layout resources
    ImageView ivAppIcon = (ImageView)v.findViewById(R.id.ivIcon);
    TextView tvAppName = (TextView)v.findViewById(R.id.tvName);
    TextView tvPkgName = (TextView)v.findViewById(R.id.tvPack);

    // set data to display
    ivAppIcon.setImageDrawable(entry.loadIcon(mPackManager));
    tvAppName.setText(entry.loadLabel(mPackManager));
    tvPkgName.setText(entry.packageName);

    // return view
    return v;
}

2 个答案:

答案 0 :(得分:7)

修改您的Utilities.getInstalledApplication(this)以使用Collections.sort()

public static List<ApplicationInfo> getInstalledApplication(Context context) {
    PackageManager packageManager = context.getPackageManager();
    List<ApplicationInfo> apps = packageManager.getInstalledApplications(0);
    Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(packageManager));
    return apps;
}

答案 1 :(得分:0)

如果您使用的是packageManager.queryIntentActivities(intent, 0),则可以选择biegleux代码。

List<ResolveInfo> apps = packageManager.queryIntentActivities(intent, 0);
Collections.sort(apps, new ResolveInfo.DisplayNameComparator(packageManager));