2012-07-23 21 views
1

我试图让这个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; 
} 

回答

6

修改您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; 
} 
+0

谢谢!这样可行! – dythe 2012-07-23 18:13:12