2010-05-31 13 views
8

Tengo un TextView con android:maxLength establecido en 3 y otro con android:maxLength establecido en 7.Enfoque siguiente textview automáticamente

quiero enfocar a moverse automáticamente a la segunda TextView una vez que los 3 caracteres de la primera TextView se llenan. ¿Cómo lograr esto sin heredar TextView y escribir una implementación personalizada?

Respuesta

6

No lo he intentado, pero podría funcionar.

instalación de un oyente al fuego cuando el texto se cambió, para este uso

addTextChangedListener(TextWatcher watcher) 

A continuación, en base a la longitud del texto puede solicitar el cambio de foco al campo siguiente.

Si desea conocer el siguiente campo, puede llamar al View.focusSearch(View.FOCUS_FORWARD) Buscar la vista más cercana en la dirección especificada que puede enfocar. Esto en realidad no le da enfoque a esa vista.

+0

me hizo esto - public void OnTextChanged (s CharSequence, inicio, int antes, int count) { si (s.length() == 3) { Log.d (TAG, "El siguiente foco está en:" + tv1.getNextFocusDownId()); tv1.requestFocus (View.FOCUS_DOWN); } Pero no funcionó, ¿qué estoy haciendo mal? El registro imprime el mensaje correctamente cuando la longitud es 3, pero el enfoque no cambia automáticamente a la vista siguiente. – Naseer

+0

Por favor, ignore mi comentario anterior - tv2.requestFocus() funcionó. Gracias! – Naseer

+0

View.FOCUS_FORWARD no es un valor permitido para View.focusSearch. solo direcciones reales – dabluck

5

Para los futuros lectores que esperan COPY/PASTE

int MAX_LENGTH = 3; 

txt1.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (s.length() == MAX_LENGTH) { 
      txt2.requestFocus(View.FOCUS_DOWN); 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
    } 
}); 
Cuestiones relacionadas