Cómo ordenar una vista de lista en orden alfabético
He estado siguiendo este tutorial aquí sobre cómo hacer mi propio lanzador Android. Actualmente puedo mostrar todas las aplicaciones instaladas en mi teléfono en un listview. ¿Cómo puedo editar este código para que la lista esté en orden alfabético?
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_apps_list); loadApps(); loadListView(); addClickListener(); } private PackageManager manager; private List<AppDetail> apps; private void loadApps(){ manager = getPackageManager(); apps = new ArrayList<AppDetail>(); Intent i = new Intent(Intent.ACTION_MAIN, null); i.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> availableActivities = manager.queryIntentActivities(i, 0); for(ResolveInfo ri:availableActivities){ AppDetail app = new AppDetail(); app.label = ri.loadLabel(manager); app.name = ri.activityInfo.packageName; app.icon = ri.activityInfo.loadIcon(manager); apps.add(app); } } private ListView list; private void loadListView(){ list = (ListView)findViewById(R.id.apps_list); ArrayAdapter<AppDetail> adapter = new ArrayAdapter<AppDetail>(this, R.layout.list_item, apps) { @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){ convertView = getLayoutInflater().inflate(R.layout.list_item, null); } ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon); appIcon.setImageDrawable(apps.get(position).icon); TextView appLabel = (TextView)convertView.findViewById(R.id.item_app_label); appLabel.setText(apps.get(position).label); TextView appName = (TextView)convertView.findViewById(R.id.item_app_name); appName.setText(apps.get(position).name); return convertView; } }; list.setAdapter(adapter); } private void addClickListener(){ list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> av, View v, int pos, long id) { Intent i = manager.getLaunchIntentForPackage(apps.get(pos).name.toString()); AppsListActivity.this.startActivity(i); } }); }
- Android: trate de enviar sms falsos a mí mismo sin el uso de la red móvil
- Supervisar la memoria ocupada por mi aplicación en Android
- El mejor método de ahorro de batería para actualizaciones de ubicación
- Escritura de datos grabados PCM en un archivo .wav (java android)
- Fragmento de Android La animación de transacción se bloquea si hace clic mientras la animación avanza
- Reemplazar el carácter dentro de TextWatcher en android
- Cómo obtener nombres de paquetes en ejecución para Android L
- ¿Por qué DrawerLayout a veces falla al abrirse?
- Gradle imprime la advertencia aunque se selecciona SuppressWarnings
- ClipDrawable no funciona cuando se utiliza como fondo de diseño para el widget
- No se puede instalar Android Studio en Ubuntu
- Obtener la cadena del día a partir del día de la semana integer java
- ¿Cómo instalar Google Play Services en el dispositivo Genymotion 6.0?
Si bien la primera respuesta es la forma correcta y más obvia de hacerlo, creo que una respuesta requiere un ejemplo completo:
Collections.sort(apps, new Comparator<AppDetail>() { /* This comparator will sort AppDetail objects alphabetically. */ @Override public int compare(AppDetail a1, AppDetail a2) { // String implements Comparable return (a1.label.toString()).compareTo(a2.label.toString()); } });
Esto ordenará los objetos AppDetail
orden alfabético por su campo de label
.
Haga esto antes de llamar a setAdapter()
.
Ordena tu List
apps
antes de ponerla en el ArrayAdapter
, usando Collections.sort()
.
Collections.sort(contactList, new Comparator<Map<String, String>>() { @Override public int compare(Map<String, String> o1, Map<String, String> o2) { // TODO Auto-generated method stub String name1 = o1.get("name"); String name2 = o2.get("name"); if (name1 == null) return -1; return name1.compareTo(name2); } }); }
- Excepción de puntero nulo en ActionBar en FragmentActivity
- Cómo dividir una cadena en varios bloques de caracteres?