German Frage zu KeyCodes.KEYCODE_BACK

Joe73

Active Member
Licensed User
Hallo,
Ist es eigentlich möglich bei der Auswertung des KeyCodes.KEYCODE_BACK
gleich mehr als einen "Schritt" zurück zu gehen?
Ich möchte einen Wert editieren (EditText) mit IME
Wenn die IME Tastatur geöffnet ist möchte ich eine Möglichkeit für den
Abbruch schaffen. Es soll dann nicht nur die Tastatur geschlossen werden
sondern auch das EditText-Feld
Bislang muss ich halt 2 mal die Back-Taste "drücken"

Gruß Jürgen
 

MaFu

Well-Known Member
Licensed User
Longtime User
Was meinst Du mit "EditText-Feld soll geschlossen werden"?
Ist die Eingabe in einem eigenen Activity welches Du beenden möchtest?
Dann würde ich bei KEYCODE_BACK folgende zwei Befehle ausführen:
B4X:
IME.HideKeyboard
Activity.Finish

Oder meinst Du was anderes?
 

Joe73

Active Member
Licensed User
Hallo,

Hier mal der Code mit welchem ich den Back_Code auswerte.

B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean
     Log ("keycode " & KeyCode)
    Log ("edittext2 " & EditText2.Text)
   
    If KeyCode = KeyCodes.KEYCODE_BACK Then
   
        Label1.Text = KeyCode
        If EditText2.Text <> "" Then
           
            EditText2.Text = ""
            'EditText2.Color = Colors.Transparent
            'EditText2.Enabled = False
            EditText2.Visible = False
            Return True
        Else
            Return False
        End If
           
     Else
        Return False    ' Handle the other presses in the OS
    End If
End Sub

Ich möchte folgendes erreichen:
In einer Activity öffne ich ein EditText View um einen darin stehenden
Wert zu ändern. Nun überlege ich mir den Text doch nicht zu ändern
und das EditText View wieder zu schließen.
Allerdings ist beim Öffnen von EditText View auch das Keyboard von IME
geöffnet worden.
Wenn ich nun die Backtaste drücke schließt sich die Tastatur aber das
EditText View bleibt sichtbar. Mit Hilfe des eingebauten Label1 kann ich
feststellen, dass die SUB Activity_KeyPress garnicht aufgerufen wird.
Beim 2. mal Back wird sie dann aufgerufen und das EditText View wird
geschlossen.
Das merkwürdige(für mich) nun aber ist, wenn ich gleich wieder
EditText View öffne und dann Back drücke wird sofort Tastatur und
EditText View geschlossen, so wie ich es möchte. Allerdings tritt beim
nächsten Durchlauf wieder der erste Fall ein (2 mal Back drücken)
und dann geht es wieder mit einmal drücken (Back).
Jedes 2. mal funktioniert es....

Vielleicht weis jemand einen Rat...

Gruß Jürgen
 

Joe73

Active Member
Licensed User
Hallo,

ebenso gibt es z.T. Probleme beim Öffnen einer EditText View.
Ich möchte z.B. folgendes machen:

B4X:
Sub Button1_Click        ' Add entry
    Dim query As String
   
    If Carlog1.Msg_Box ("Add entry?", "cmd") Then
       
        wbvTable1.Visible = False
        'wbvTable1.Enabled = False
        EditText2.Visible = False
        EditText2.Enabled = False
       
        EditText1.Enabled = True
        EditText1.Visible = True
        EditText1.Text = ""
   
        IME.ShowKeyboard(EditText1)
       
           
    End If
End Sub

Wenn ich den Button1 drücke öffnet sich die Soft-Tastatur und das EditText View befindet
sich am oberen Rand. Nachdem ich Enter drücke (ohne Texteingabe) wird alles wieder geschlossen.
So soll es sein.
Wenn ich dies immer wieder wiederhole dann kommt es vor, dass sich die Tastatur nicht öffnet
aber nur das EditText View am unteren Bild-Rand angezeigt wird.

Danach geht es dann wieder einige male, hier lässt sich kein System erkennen wann es geht oder nicht geht.

Gruß Jürgen
 

Joe73

Active Member
Licensed User
Hallo,
Ich glaube eine Lösung gefunden zu haben.
Da, wenn die IME Tastatur geöffnet ist, diese
den KEYCODE_BACK "verschluckt" beim Schließen,
jedoch aber noch IME_HeightChanged(NewHeight As Int, OldHeight As Int)
ausgeführt wird muss ich hier dafür sorgen, dass alles wieder
geschlossen wird was nicht mehr gebraucht wird.
Dabei muss ich dann wohl mit einer Status-Variablen arbeiten welche
je nach Eingabe einen bestimmten Status zugewiesen bekommt.

Das Problem mit der sich nicht immer öffnenden Tastatur lag offensichtlich
an der Msg_Box welche sich in einem Code-Modul befand.
Ohne den Umweg bzw. Abfrage über die Msg_Box gab es keine
Probleme. Die Tastatur hat sich über 20 mal hintereinander ohne
Probleme geöffnet.

Vielleicht hat noch jemand eine andere Idee für dieses Problem...

Hier noch der Code der msg_box.
Selbst wenn die SUB direkt in der Aktivity steht öffnet sich die
Tastatur nich fehlerfrei.


B4X:
Sub Msg_Box1 (msgString As String, cmd As String)
    Dim A As Int
    Dim Answ As Boolean
    Answ = False
    A = Msgbox2(msgString, cmd , "Yes", "", "No", Null)
    If A = DialogResponse.POSITIVE Then
        Answ = True
    End If
    Return Answ
End Sub

Gruß Jürgen
 
Top