2010-12-14 10 views
0

Ich habe ein Problem, wo es scheint, ich kann nicht Schlüsselereignisse überhaupt im Emulator schießen (es arbeitete vorher, aber irgendwie .. etwas kaputt).Android - onKey Ereignisse feuern nicht

Hier ist ein Beispielcode, der das zweite Textfeld mit dem Text des ersten füllen sollte, wenn eine Taste in der ersten gedrückt wird (oder wenn auf die Schaltfläche geklickt wird). Aber das tut es nicht.

Mache ich etwas falsch?

Aktivitätsklasse:

package abc.def; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnKeyListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class Fill extends Activity { 
    /** Called when the activity is first created. */ 
EditText e1; 
EditText e2; 
Button b; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     e1 = (EditText) findViewById(R.id.EditText01); 
     e2 = (EditText) findViewById(R.id.EditText02); 
     b = (Button) findViewById(R.id.Button01); 

     e1.setOnKeyListener(new OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
    e2.setText(e1.getText()); 
    return false; 
    } 

     }); 

     b.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
    e2.setText(e1.getText()); 
    } 
     }); 
    } 
} 

Layout-Datei:.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 
<EditText android:text="" android:id="@+id/EditText01" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText> 
<EditText android:text="" android:id="@+id/EditText02" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText> 
<Button android:text="Click" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 
</LinearLayout> 
+1

hast du das zufällig versucht? e2.setText (e1.getText(). toString()); Ich dachte, .getText() gibt nur die Textansicht zurück, ich könnte mich aber irren ... – ninjasense

+0

Ich dachte, 'ToString()' wurde automatisch für jedes 'Objekt' aufgerufen, das als' String' betrachtet werden muss. – rds

+0

Eigentlich toString() würde in diesem Fall niemals aufgerufen werden - getText() gibt ein Objekt zurück, das Editable implementiert (wodurch CharSequence erweitert wird). setText() akzeptiert einen CharSequence-Parameter. – Adam

Antwort

0

Sie sollten e1.getText verwenden() toString() zu bekommen Ergebnis.

LogCat wird nützlich sein, um die Werte herauszufinden, die weitergegeben werden. Sie können das folgende LogCat hinzufügen, um ähnliche Probleme zu finden

Log.d ("SOMENAME", e1.getText(). ToString);

+0

Sorry, vielleicht war ich nicht ganz klar. Der Code in den Event-Handlern funktioniert (wenn ich auf den Button klicke, wird das Textfeld wie gewünscht ausgefüllt). Das OnKey-Ereignis wird jedoch nie ausgelöst, wenn Sie das erste Textfeld eingeben. Dies ist das Problem. Ich verstehe nicht warum. – Adam

+0

Gut .. Ich überprüfte den Code. Ihr Code funktioniert einwandfrei in meinem Emulator. Ich benutze AVD mit Android L8. – GSree

+0

Nur ein Update: Dieser Code funktioniert auch nicht auf einem physischen Gerät mit einer weichen (Bildschirm-) Tastatur wie beabsichtigt. Ich habe einen Workaround gefunden, indem ich TextWatcher implementiert habe und stattdessen addTextChangedListener() verwendet habe, was richtig funktioniert. – Adam

0

Ich habe dies durch die Implementierung von TextWatcher und die Verwendung von addTextChangedListener() statt. Keine Ahnung, warum das funktioniert, wenn der onKeyListener nicht funktioniert - ich vermute, dass die Tastaturereignisse aus irgendeinem Grund nicht einmal mein Widget erreichen.

Verwandte Themen