ListView alphabetisch sortieren

  • 1 Antworten
  • Letztes Antwortdatum
L

lewa19

Neues Mitglied
0
Hallo. Ich habe eine ListView, die mir alle Apps meines Handys auflistet und bei Klick auf ein ListItem öffnet sich die jeweilige App. Das klappt soweit ganz gut, bloß sind dir Apps nicht sortiert und ich habe keinen Plan, wie man das macht. Ich habe schon schon danach gegoogelt, aber nichts gefunden, was bei mir funktioniert hat. Hier ist mein Code:
Code:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.content.pm.*;
import java.util.*;
import android.widget.*;
import android.view.*;

public class AppsListActivity extends Activity {

	
    @Override
    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);
				}
			});
	}
}
Danke im voraus!
 
Zuletzt bearbeitet:
Google wirft Dir bestimmt ein paar Infos zum Thema Collection, sort , compareto ect aus..

------------------ Vorschlag 1

Gibt doch deinem Object AppDetail die Funktion

compareTo

mit an die Seite und den Rest erledigts du dann per

Collections.sort(apps);

Du musst halt in compareto nur sagen was verglichen werden soll.
Hier in meinem Beispiel ist es ein int Wert

Code:
     @Override
    public int compareTo(DataMannschaft dm) {
        return this.entfernung.compareTo(dm.entfernung);
}
 
Zurück
Oben Unten