Intereting Posts
Метод getLong (int) не определен для SherlockFragmentList Android Maps API v2 Marker с настраиваемыми привязными переходами при перетаскивании Экранирование специальных символов, таких как & in android xml OpenGL ES 3 Экземпляр экземпляра не работает, но работает на рабочем столе Google Glass GDK – Когда использовать действия против карт? Как Android Volley обрабатывает временную потерю сетевого соединения? Найти идентификатор виджета главного экрана Масштабирование выбранного изображения в галерее Как скрыть невидимый веб-просмотр в android Как программно изменить основной цвет в Android L Проблема с вкладками и полупрозрачной статусной панелью / навигацией для Android 4.4. Как остановить один IntentService при запуске многих IntentService Как реклама работает на мобильных телефонах? Ограничить доступ базы данных Firebase к одному Android-приложению Когда SyncAdapter запускает синхронизацию на Android?

Как отсортировать список в алфавитном порядке

Я слежу за этим учебным пособием здесь о том, как сделать свою собственную пусковую установку для Android. В настоящее время я могу отображать все установленные приложения на своем телефоне в списке. Как я могу отредактировать этот код, чтобы список был в алфавитном порядке?

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

Хотя первый ответ – правильный и наиболее очевидный способ сделать это, я считаю, что ответ требует полного примера:

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

Это отсортирует объекты AppDetail алфавитном порядке по полю label .

Сделайте это перед вызовом setAdapter() .

Сортируйте List apps перед тем, как поместить его в ArrayAdapter , используя 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); } }); }