German Fehler in der Label-Implementation?

Amalkotey

Active Member
Licensed User
Longtime User
Ich habe Problem, dass ich ein Label, welches ich im Designer erstellt habe, den Label-Text nich austauschen bzw. setzen kann. Mit dem nachfolgenden Code möchte ich den Label-Inhalt ändern:

B4X:
Dim lblSet As Label
lblSet.Initialize("")
lblSet.TextColor = Colors.Yellow
lblSet.Text = "TEST"

Die Textfarbe wird nicht geändert und der Begriff "TEST" wird nicht gesetzt. Der konstante Label-Text wird auch nicht angezeigt. Wenn ich mit

B4X:
Activity.AddView(lblSet, 100, 1000, 100%x, 80%y)

das Label auf der Activity setze, wird der Label-Text in der gewünschten Textfarbe angezeigt. Aufgefallen ist mir, wenn ich den Label-Text in Designer setze, und Multi-Text lösche wird der Label-text auch nicht angezeigt. Was mache ich falsch?

Vielen Dank für euere Hilfe im Voraus.
 

klaus

Expert
Licensed User
Longtime User
Alle Views die Du im Designer erstellst darfst Du nicht nochmal initialisieren das ist in LoadLayout inbegriffen !
Lösche diese Zeile
B4X:
lblSet.Initialize("")
Falls Du B4A Version 2.70 benutzt bekommst du eine Warningmeldung für dieses Problem.

Beste Grüsse.
 

Amalkotey

Active Member
Licensed User
Longtime User
Alle Views die Du im Designer erstellst darfst Du nicht nochmal initialisieren das ist in LoadLayout inbegriffen !
Lösche diese Zeile
B4X:
lblSet.Initialize("")
Falls Du B4A Version 2.70 benutzt bekommst du eine Warningmeldung für dieses Problem.

Beste Grüsse.

Hallo Klaus,

wenn ich lblSet.Initialize("") entferne, bekomme ich nachfolgende Exception:

B4X:
java.lang.RuntimeException: Object should first be initialized (Label). at .....

und der Label wird nicht angezeigt.
 

klaus

Expert
Licensed User
Longtime User
Es ist leider nicht leicht helfen zu können nur mit kurzen Codesnippets ohne den Rest zu sehen.
In welcher Routine befindet sich diese Zeil Dim lblSet As Label, sie muss in Globals sein.
Ist der Name lblSet richtig ?
Ansonsten poste dein Projekt oder zu mindest ein abgemagertes Projekt als zip Datei die das Problem veranschaulicht.

Beste Grüsse.
 

Amalkotey

Active Member
Licensed User
Longtime User
Hier die gesamte Code

B4X:
Sub Activity_Create(FirstTime As Boolean)
   Try
      Dim In As Intent
      Dim LizMan As LizMa

      Dim bd As BitmapDrawable
      Dim Package As String
      Dim App As String
      Dim AllLabels As List
      Dim Lable As String
      Dim lblSet As Label

      lblSet.Initialize("")

      AllApps.Initialize
      AllPackages.Initialize
      AllLabels.Initialize

      AllPackages = PM.GetInstalledPackages
      If (AllPackages.Size > 0) Then
         AllApps.Clear
         For i = 0 To AllPackages.Size - 1
            Package = AllPackages.Get(i)
            In = PM.GetApplicationIntent(Package)
            If (In.IsInitialized) Then
               Lable = PM.GetApplicationLabel(Package).Trim
               AllLabels.Add(Lable)
               AllApps.Put(Lable, Package)
            End If
         Next
      Else
         Msgbox("Keine Applikationen installiert!" & CRLF & "Programm wird beendet.", "Error")
      End If

      Activity.LoadLayout("AppList.bal")

      svList.Initialize("lstAllApps")
      svList.ScrollingBackgroundColor = Colors.Transparent
      svList.SingleLineLayout.ItemHeight = 100dip
      svList.SingleLineLayout.Label.TextSize = 20
      svList.SingleLineLayout.Label.TextColor = Colors.Blue
      svList.SingleLineLayout.Label.Gravity = Gravity.CENTER
      svList.FastScrollEnabled = True

      If (AllLabels.Size > 0) Then
         AllLabels = LizMan.sortList(AllLabels)
         For i = 0 To AllLabels.Size - 1
            Package = AllApps.Get(AllLabels.Get(i))
            Lable = PM.GetApplicationLabel(Package)
            If Package.EqualsIgnoreCase(Global.LockPackage) = True Then
               App = Lable
            End If
            bd = PM.GetApplicationIcon(Package)
            svList.AddTwoLinesAndBitmap(AllLabels.Get(i), Package, bd.Bitmap)
         Next
         Activity.AddView(svList, 0, 0, 100%x, 80%y)
         lblSet.Text = Global.LockPackage
      End If
   Catch
      Exceptions.RuntimeException("AppView.Activity_Create")   
   End Try
End Sub

In meinem Project ist das die zweite Activity. Unter DesignerScript steht nachfolgender Code:

B4X:
btnExit.Bottom = 100%y + 3dip
btnOK.Bottom = btnExit.Bottom
lblSet.Bottom = 100%y - (btnExit.Height - 25)
lblSet.HorizontalCenter = 50%x
 

Attachments

  • Abstract-Designer.png
    Abstract-Designer.png
    11.5 KB · Views: 222
  • Designer.png
    Designer.png
    34.4 KB · Views: 222

klaus

Expert
Licensed User
Longtime User
Wie schon geschrieben, da lblSet im Layout definiert ist darfst Du es nicht nochmal initialisieren !
Was ist Global.LockPackage ?

lblSet.Bottom = 100%y - (btnExit.Height - 25), Du solltest immer mit dip Werten arbeiten, also 25dip.

Beste Grüsse.
 

Amalkotey

Active Member
Licensed User
Longtime User
Global.Package st eine globale Variable, welche im BAS-Modul Global.bas" definiert ist und den Package-Namen der Lockerapp speichert. Die Varialble ist initialisiert und hat einen Stringwert.

Wie geschrieben, wenn ich das lblSet.Initialize("") entferne, kommt diese Fehlermeldung:

B4X:
LastException: java.lang.RuntimeException: Object should first be initialized (Label). at SubRoutine: AppView.Activity_Create

Ich habe keine Ahnung, warum dieser Fehler auftritt. Die Fehlermeldung kommt bei jedem Label. Ich habe jetzt mall drei Stück in das Layout gesetzt und kenes kann ich während der Laufzeit ändern. Die Änderung erscheint nur, wenn ich das Label mit Activity.AddView erstelle.
 
Last edited:
D

Deleted member 103

Guest
Hallo Amalkotey,

ich habe dein Code etwas geändert, damit sollte es funktionieren, habe aber nicht probiert.
B4X:
Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.

   Dim lblSet As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Try
        Dim In As Intent
        Dim LizMan As LizMa

        Dim bd As BitmapDrawable
        Dim Package As String
        Dim App As String
        Dim AllLabels As List
        Dim Lable As String
'        Dim lblSet As Label

'        lblSet.Initialize("")

        AllApps.Initialize
        AllPackages.Initialize
        AllLabels.Initialize

        AllPackages = PM.GetInstalledPackages
        If (AllPackages.Size > 0) Then
            AllApps.Clear
            For i = 0 To AllPackages.Size - 1
                Package = AllPackages.Get(i)
                In = PM.GetApplicationIntent(Package)
                If (In.IsInitialized) Then
                    Lable = PM.GetApplicationLabel(Package).Trim
                    AllLabels.Add(Lable)
                    AllApps.Put(Lable, Package)
                End If
            Next
        Else
            Msgbox("Keine Applikationen installiert!" & CRLF & "Programm wird beendet.", "Error")
        End If

'        Activity.LoadLayout("AppList.bal")
        Activity.LoadLayout("AppList")

        svList.Initialize("lstAllApps")
        svList.ScrollingBackgroundColor = Colors.Transparent
        svList.SingleLineLayout.ItemHeight = 100dip
        svList.SingleLineLayout.Label.TextSize = 20
        svList.SingleLineLayout.Label.TextColor = Colors.Blue
        svList.SingleLineLayout.Label.Gravity = Gravity.CENTER
        svList.FastScrollEnabled = True

        If (AllLabels.Size > 0) Then
            AllLabels = LizMan.sortList(AllLabels)
            For i = 0 To AllLabels.Size - 1
                Package = AllApps.Get(AllLabels.Get(i))
                Lable = PM.GetApplicationLabel(Package)
                If Package.EqualsIgnoreCase(Global.LockPackage) = True Then
                    App = Lable
                End If
                bd = PM.GetApplicationIcon(Package)
                svList.AddTwoLinesAndBitmap(AllLabels.Get(i), Package, bd.Bitmap)
            Next
            Activity.AddView(svList, 0, 0, 100%x, 80%y)
            lblSet.Text = Global.LockPackage
        End If
    Catch
        Exceptions.RuntimeException("AppView.Activity_Create")    
    End Try
End Sub
 

Amalkotey

Active Member
Licensed User
Longtime User
Hallo Filippo,

nein, funktioniert nicht. Ohne Deklaration für das Label kann ich noch nicht mal compilieren. Ohne Initialisierung bekomme ich die in Post #7 beschriebene Exception und mit Intialisierung wird der Label-Text ncht geändert. DeInstallation und Neu-Installation von B4A hat auch nicht gebracht.
 
Last edited:

Amalkotey

Active Member
Licensed User
Longtime User
So, ich weis jetzt voran es lag. Alle View müssen in der Sub Globals definiert werden. Somit ist men Problem gelöst. Vielen Dank an Klaus und Filippo.
 
Top