German Alphabetische Sortierung meiner Apps in Liste

so27

Active Member
Licensed User
Hallo zusammen,

über den nachfolgenden Code lese ich die Apps ein, welche auf meinem Gerät installiert sind.
B4X:
Sub Einlesen

ListView1.clear
Dim pl As List
Dim  pm As PackageManager

    Dim bdw As BitmapDrawable

    pl = pm.GetInstalledPackages

    For a=0 To pl.Size-1

     If pl.Get(a)="com.android.systemui" Then Continue   ' Überspringen, da unter Android >5 kein Icon

    Log(pl.Get(a))
        bdw = pm.GetApplicationIcon(pl.Get(a))   
        ListView1.AddTwoLinesAndBitmap2(pm.GetApplicationLabel(pl.Get(a)),pl.Get(a), bdw.Bitmap, pl.Get(a))

    Next

End Sub

Die Packages (also com.name.name) stecken in der pl List. Diese zu sortieren, ist nicht das Problem.
Wie kann ich es denn anstellen, dass mein Listview über die erste Zeile pm.GetApplicationLabel (also der wirkliche Name der App)(in der zweiten Zeite steckt das Packages) sortiert wird?
 

specci48

Well-Known Member
Licensed User
Hi,

Listen mit eigenen Typen kann man nach einem beliebigen Typ-Wert sortieren.
Hier die Dokumentation zu List.SortType und anbei konkret für dein Problem:

B4X:
    Sub Globals
    ...
    Type InstalledProgram(AppLabel As String, PackageName As String)
    ...  
End Sub

Sub Einlesen
    ListView1.clear
    Dim pl As List
    Dim pm As PackageManager
    Dim bdw As BitmapDrawable
  
    pl = pm.GetInstalledPackages
  
    Dim programList As List
    programList.Initialize
  
    For a = 0 To pl.Size - 1
        If pl.Get(a)="com.android.systemui" Then Continue   ' Überspringen, da unter Android >5 kein Icon
        Dim program As InstalledProgram
        program.AppLabel = pm.GetApplicationLabel(pl.Get(a))
        program.PackageName = pl.Get(a)
        programList.Add(program)
    Next
   
    programList.SortType("AppLabel", True)
  
    For a = 0 To programList.Size - 1
        Dim program As InstalledProgram
        program = programList.Get(a)
        Log(program.PackageName)
        bdw = pm.GetApplicationIcon(program.PackageName) 
        ListView1.AddTwoLinesAndBitmap2(program.AppLabel, program.PackageName, bdw.Bitmap, program.PackageName)
    Next
End Sub


Gruß
specci48
 

so27

Active Member
Licensed User
Alles klar, herzlichen Dank für das Beispiel. Klappt (juhu ;))
 
Top