2010-12-14 55 views
0

J'ai un problème où il semble que je ne peux pas déclencher d'événements clés dans l'émulateur (ça fonctionnait avant, mais, d'une manière ou d'une autre ... quelque chose s'est cassé).Android - les événements onKey ne se déclenchent pas

Voici un exemple de code qui doit remplir la deuxième zone de texte avec le texte du premier lorsque vous appuyez sur une touche dans la première (ou si vous cliquez sur le bouton). Mais ça ne fait pas ça.

Est-ce que je fais quelque chose de mal?

Classe d'activité:

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()); 
    } 
     }); 
    } 
} 

fichier Mise en page:.

<?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

avez-vous essayé cela par hasard? e2.setText (e1.getText(). toString()); Je pensais que .getText() ne renvoyait que la textview, je pouvais me tromper ... – ninjasense

+0

Je pensais que 'ToString()' était automatiquement appelé sur n'importe quel 'Object' qui devait être considéré comme' String' – rds

+0

En fait, toString() ne sera jamais appelé dans ce cas - getText() renvoie un objet qui implémente Editable (qui étend CharSequence). setText() prend un paramètre CharSequence. – Adam

Répondre

0

Vous devez utiliser e1.getText() toString() pour obtenir le résultat. LogCat sera utile pour connaître les valeurs transmises. Vous pouvez ajouter le LogCat suivant pour trouver des problèmes similaires

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

+0

Désolé, peut-être que je n'étais pas totalement clair. Le code dans les gestionnaires d'événements fonctionne (si je clique sur le bouton, la zone de texte est remplie comme prévu). Cependant, l'événement OnKey ne se déclenche jamais lorsque vous tapez la première zone de texte .. et c'est le problème. Je ne comprends pas pourquoi. – Adam

+0

Eh bien .. J'ai vérifié le code. Votre code fonctionne correctement dans mon émulateur. J'utilise AVD avec Android L8. – GSree

+0

Juste une mise à jour: Ce code ne fonctionne pas non plus comme prévu sur un périphérique physique utilisant un clavier logiciel (à l'écran). J'ai trouvé une solution de contournement en implémentant TextWatcher et en utilisant à la place addTextChangedListener(), qui fonctionne correctement. – Adam

0

J'ai obtenu ceci pour travailler en implémentant TextWatcher et en utilisant à la place addTextChangedListener(). Aucune idée pourquoi cela fonctionne quand onKeyListener ne le fait pas - Je soupçonne que les événements du clavier n'atteignent même pas mon widget pour une raison quelconque.