German Custom Dialog Problem

mcmanu

Active Member
Licensed User
Longtime User
Hi,
Ich habe ein Dialog erstellt in der sich eine Listview befindet.
Ich möchte wenn der Dialog angezeigt wird und ich auf einen eintrag der Listview Klicke das sich der geklickte eintrag der Listview grün färbt.
Nun ist das Problem das das Listview_click event erst gefeuert wird wenn ich auf den Dialog button "ok" Drücke.

Ist es möglich das ich direkt wenn der Dialog angezeigt wird, den hintergrund des listvieweintrags ändere, ohne das ich zuerst auf ok drücken muss?

B4X:
Sub ListView1_ItemClick (Position As Int, Value As Object)  <--- Wird erst gefeuert wenn dialog button gedrückt wird
   If Position=0 Then
   ListView1.SingleLineLayout.Label.TextColor=Colors.Green
   retModify = DialogResponse.POSITIVE
   Else If Position=1 Then
   ListView1.SingleLineLayout.Label.TextColor=Colors.Green
   retModify = DialogResponse.POSITIVE
   End If
End Sub

Sub Button1_Click
   Dim i As Int
   For i = 0 To 10 step 1
ListView1.AddSingleLine("test" & i)
   Next   
   mydialog.AddView(ListView1,100%x,40%y)
   
   mydialog.Show("Wähle eintrag","Ok","","",Null) <-- wenn dialog angezeigt wird, und auf eintrag der listview geklickt wird soll der eintrag farblich markiert werden
end sub
 
Last edited:

peternmb

Well-Known Member
Licensed User
Longtime User
ich glaube nicht, dass dir das mit einem CustomDialog gelingt. Der ist modal und alle weiteren Aktionen werden erst danach ausgeführt.

Abhilfe - zumindest bei mir: dem Rat von Klaus folgen und statt eines CustomDialoges alles auf ein Paneel legen.
Ich habe den Bildschirm außenrum abgedunkelt und es sieht fast wie der CustomDialog.

Macht dann zwar etwas mehr Arbeit - funktioniert aber einwandfrei.
 

mcmanu

Active Member
Licensed User
Longtime User
Danke peter :)

Danke Peter :) Hab Gestern es mit einem Inputdialog gelöst :) obwohl ein costum dialog schöner wäre.
Eventuell versuche ich es mit deinem rat nochmal ;)
 

christianK

Member
Licensed User
Longtime User
hallo,
ich bin noch in der spiel- und entdeckerphase. bitte habt nachsicht :)

ich glaube ich habe ein ähnliches problem (cd2)

der original-code aus der beispiel-datei:

B4X:
Sub btnCustom2_Click
   Dim cd As CustomDialog2
   Dim pnl As Panel
   pnl.Initialize("pnl")
   Dim bgnd As ColorDrawable
   bgnd.Initialize(Colors.Cyan, 5dip)
   pnl.Background = bgnd
   Dim btn1 As Button
   btn1.Initialize("btn1")
   btn1.Text = "Press me"
   pnl.AddView(btn1, 80dip, 50dip, 60dip, 60dip)
   lbl1.Initialize("")
   pnl.AddView(lbl1, 50dip, 120dip, 120dip, 60dip)
   
   Dim lv As ListView
   lv.Initialize("lv")
   lv.AddTwoLinesAndBitmap("one", "one", Null)
   lv.AddTwoLinesAndBitmap("two", "one", Null)
   lv.AddTwoLinesAndBitmap("three", "one", Null)
   pnl.AddView(lv, 300dip, 120dip, 120dip, 250dip)
   
   cd.AddView(pnl, 77%x, 60%y) ' sizing relative to the screen size is probably best
   ret = cd.Show("B4A Custom Dialog", "Yes", "No", "Maybe", Bmp)   
   ToastMessageShow(ret,True)
End Sub

Sub btn1_Click
   lbl1.Text = "Pressed!"
   lbl1.Color = Colors.Black
   ToastMessageShow("Pressed!", False)      
End Sub


bmp und lbl1 sind in globals gedimmt.



nun habe ich den code nur leicht abgewandelt:

B4X:
Sub Sprache

'Do While Langu=""


   Dim cd As CustomDialog2
   Dim pnl As Panel
   pnl.Initialize("pnl")
   Dim bgnd As ColorDrawable
   bgnd.Initialize(Colors.White, 5dip)
   pnl.Background = bgnd
   Dim langbtn1 As Button
   Dim langbtn2 As Button
   langbtn1.Initialize("langbtn1")
   langbtn2.Initialize("langbtn2")
   langbtn1.Text = "Deutsch"
   langbtn2.Text = "Englisch"
   pnl.AddView(langbtn1, 25dip, 50dip, 90dip, 50dip)
   pnl.AddView(langbtn2, 125dip, 50dip, 90dip, 50dip)
   lbl1.Initialize("Bitte eine Sprache wählen. Please select language.")
   pnl.AddView(lbl1, 80dip, 100dip, 120dip, 60dip)
   
   cd.AddView(pnl, 77%x, 60%y) ' sizing relative to the screen size is probably best
   ret = cd.Show("Sprache", "OK", "", "", BMP)      
    ToastMessageShow("lolo "&Langu,True)
   
'Loop   
   
   
End Sub

Sub langbtn1_Click
   lbl1.Text = "Deutsch gewält"
   lbl1.Color = Colors.Blue
   ToastMessageShow("Ok", False)
   Langu="D"
End Sub

Sub langbtn2_Click
   lbl1.Text = "Englisch gewält"
   lbl1.Color = Colors.Blue
   ToastMessageShow("Ok", False)
   Langu="E"
End Sub

bmp und lbl1 sind ebenfalls in globals gedimmt.
dennoch "reagiert" das programm auf keine der beiden langbtn-klicks. ich sehe aber keinen (was das angeht:) entscheidenden unterschied.



------- snip ------------

ab hier nur der gesamtcode, falls der fehler in einer der anderen abschnitte liegt. muss nicht gelesen werden (gibt hier lieder keine spoiler-funktion)

B4X:
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.
   
   Dim GlobSettings As Map

   Dim Nick As String
   Dim Pass As String
   Dim Numb As String
   Dim Langu As Char
   Dim BMP As Bitmap
   
   Dim pId As PhoneId
    Dim Numbakt = pId.GetLine1Number As String



End Sub

Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.
      Dim lbl1 As Label ' sprachwahl dialog


End Sub

Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:
   'Activity.LoadLayout("Layout1")
   

   
   
   Activity.LoadLayout("loading")
    GlobSettings.Initialize
   BMP.Initialize(File.DirAssets, "blubber.jpg")
   Startenboot

   
   
   

End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Startenboot

ToastMessageShow ("Start", False)

If File.Exists(File.DirInternal, "Settings.txt") Then



            ToastMessageShow ("joa", False)
            
            GlobSettings=File.ReadMap(File.DirInternal, "Settings.txt") 
            Nick=GlobSettings.Get("nick")
            Pass=GlobSettings.Get("pass")
            Numb=GlobSettings.Get("numb")
            Langu=GlobSettings.Get("langu")
Else



            GlobSettings.Put("nick", "")
                GlobSettings.Put("pass", "")
            GlobSettings.Put("numb", "")
            GlobSettings.Put("langu", "")
            
            
            ToastMessageShow ("isnich", False)

            File.WriteMap(File.DirInternal, "Settings.txt", GlobSettings)

End If

Sprache

ToastMessageShow("Nach Sprache",True)

If Numb="" Then
Numbakt = pId.GetLine1Number
            ToastMessageShow (Numbakt, False)
End If


End Sub


#Region sprachwahl

Sub Sprache

Do While Langu=""


   Dim cd As CustomDialog2
   Dim pnl As Panel
   pnl.Initialize("pnl")
   Dim bgnd As ColorDrawable
   bgnd.Initialize(Colors.White, 5dip)
   pnl.Background = bgnd
   Dim langbtn1 As Button
   Dim langbtn2 As Button
   langbtn1.Initialize("langbtn1")
   langbtn2.Initialize("langbtn2")
   langbtn1.Text = "Deutsch"
   langbtn2.Text = "Englisch"
   pnl.AddView(langbtn1, 25dip, 50dip, 90dip, 50dip)
   pnl.AddView(langbtn2, 125dip, 50dip, 90dip, 50dip)
   lbl1.Initialize("Bitte eine Sprache wählen. Please select language.")
   pnl.AddView(lbl1, 80dip, 100dip, 120dip, 60dip)
   
   cd.AddView(pnl, 77%x, 60%y) ' sizing relative to the screen size is probably best
   ret = cd.Show("Sprache", "OK", "", "", BMP)      
    ToastMessageShow("lolo "&Langu,True)
   
Loop   
   
   
End Sub

Sub langbtn1_Click
   lbl1.Text = "Deutsch gewält"
   lbl1.Color = Colors.Blue
   ToastMessageShow("Ok", False)
   Langu="D"
End Sub

Sub langbtn2_Click
   lbl1.Text = "Englisch gewält"
   lbl1.Color = Colors.Blue
   ToastMessageShow("Ok", False)
   Langu="E"
End Sub

#End Region



bitte entschuldigt die ganzen "lolo" und blabla-toasts, die hab ich jetzt zur kontrolle überall reingeschrieben.





edit:

da ich die frage auch nochmal als neuen post im englischsprachigen forum gepostet habe (weil hier war es ja nur in einem bestehenden thread)
http://www.b4x.com/forum/basic4android-updates-questions/25939-customdialog2-buttons.html
hier gleich mal die lösung.

ich hab die "sprache"-sub einfach mit "sprache" aufgerufen. offensichtlich geht das nicht. wenn ich es mit CallSubDelayed mache, funktioniert es.
 
Last edited:
Top