2011-01-13 5 views
2

Ich habe eine einfache app mit 2 edittext boxen. Wenn die Eingabe in die erste Box eingegeben wird, wird ein Satz von Berechnungen durchgeführt. Wenn die Eingabe stattdessen in die andere eingegeben wird, tritt eine andere Menge von Berechnungen auf.editbox lostfocus feuert auf die falsche edittext box

Also, wenn eine Zahl in die erste Box etBox1 eingegeben wird, und der Benutzer die Box verlässt, werden die Daten aus der ersten Box verwendet, um ein Ergebnis zu berechnen und in die zweite Box zu legen. Wenn eine Zahl in die zweite Box etBox2 eingegeben wird, wird mit den Daten ein Wert für die erste Box berechnet.

Ich habe versucht:

final EditText etBox1 = (EditText) findViewById(R.id.etBox1) 
final EditText etBox2 = (EditText) findViewById(R.id.etBox2) 

etBox1.setOnFocusChangeListener(new View.OnFocusChangeListener() 
{ 
    @override 
    public void onFocusChange(View v, boolean lostfocus) 
    { 
     if (lostFocus == true) 
     { //do my calculations....} 

Diese wird ausgelöst, wenn der Fokus auf etBox1 gegeben, anstatt für die Box Fokus verlieren zu warten. Dies stürzt die App ab, weil der Benutzer keine Möglichkeit hatte, eine Zahl in die Box einzugeben. Irgendwelche Ideen, warum sich das als "hasFocus" anstatt als "lostFocus" verhält? Es gibt keine Dokumentation zu LostFocus auf der Android-Website.

+0

werden Überprüfung auch möglich sein, kann es, dass das Lost-Focus-Brennen, wenn die etBox1 Gewinne konzentrieren, statt Losen konzentrieren. –

+2

Ich überarbeitete die Methode wie folgt und es funktionierte: @Override öffentlichen void onFocusChange (View v, boolean hasFocus) {if (hasFocus == false) ... etwas tun –

Antwort

2

In Ihrer Frage haben Sie dies.

final EditText etBox1 = (EditText) findViewById(R.id.etBox1); 
final EditText etBox1 = (EditText) findViewById(R.id.etBox1); 

Sie verwenden die gleiche ID beim Mappen der Textfelder. Ich denke, es sollte wie folgt aussehen:

final EditText etBox1 = (EditText) findViewById(R.id.etBox1); 
final EditText etBox2 = (EditText) findViewById(R.id.etBox2); 

Ganz zu schweigen davon, dass Sie auch einen Kompilierungsfehler mit Ihrem Code erhalten sollen, wie Sie etBox1 zweimal definieren ...
(Es sei denn, dies ist nur ein Tippfehler in Ihrem Frage, und Ihr Code sieht tatsächlich anders ...)

+0

ja, ich habe einen Tippfehler auf die Frage, aber nicht in der Code. Es tut uns leid. Ihre Version ist wie sie codiert ist. –

+0

@Ted Betz; Nun, wenn das der Fall ist, sollten Sie zumindest Ihre Frage bearbeiten, damit der Code, den Sie dort haben, korrekt ist, je nachdem wie Ihr Code aussieht. Sonst werden die Leute wahrscheinlich dasselbe sehen wie ich und nicht in der Lage sein, dir mit deinem wirklichen Problem zu helfen ... – Nailuj

+0

Ich überarbeitete die Methode wie folgt: –

0

nach http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html

onFocusChange als public void onFocusChange definiert ist (Blick v, boolean hasFocus), so dass Ihre boolean genannt Lost-Focus ist benannt nach hinten und so verwirrend Sie, ich würde empfehlen zu ändern e es zu etwas wie hasFocus.

jetzt sollten Sie sehen, dass für if-Anweisung Runde der falsche Weg ist, sollten Sie, wenn == false

+0

Bugger hat gerade deinen Kommentar zu deiner Hauptfrage bemerkt. –

Verwandte Themen