2012-09-19 9 views
19

Nach der Frage und Antwort geschrieben How to automatically move to the next edit text in android, habe ich den Code verwendet, um zum nächsten Bearbeitungsfeld zu bewegen.Umzug zum nächsten EditText in Android

et1.addTextChangedListener(new TextWatcher() { 

    public void onTextChanged(CharSequence s, int start,int before, int count) 
    { 
     // TODO Auto-generated method stub 
     if(et1.getText().toString().length()==size)  //size as per your requirement 
     { 
      et2.requestFocus(); 
     } 
    } 
    public void beforeTextChanged(CharSequence s, int start, 
        int count, int after) { 
       // TODO Auto-generated method stub 

    } 

    public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
    } 

}); 

Die Frage, die ich bin vor ist, falls ich etwas falsch eingeben, dann, selbst wenn der Benutzer explizit Fokus anfordern, das Textfeld bewegt sich zur nächsten aufgrund der Code im Text Beobachter. Kann ich etwas dagegen tun?

+0

Sie verwenden können: [KeyCode_Enter zum nächsten EditText] (http://stackoverflow.com/questions/3019965/keycode-enter-to-next-edittext) –

Antwort

8

Sie können den Schlüssel für die 1. EditText gedrückt überprüfen und wenn es „Enter“ ist der Schlüssel, dann Fokus zum nächsten bewegen Text bearbeiten.

Dies kann Ihnen helfen: KeyCode_Enter to next edittext

1

Sie können auch in Ihrer wenn die Bedingung überprüfen, die das richtig ist oder nicht ..

if(et1.getText().toString().length()==size)  //size as per your requirement 
    { 
     if(et1.gettext.toString().equals(somethingwhichyouhavecheck)) 
     { 

        et2.requestFocus(); 
     } 
     else 
     { 
     } 
    } 
+0

Es ist absolut nichts, gegen das ich nachprüfen kann. Es ist der Benutzer, der entscheidet, was eingegeben werden soll. – user1667307

+0

Sie sagten, dass das Problem, vor dem ich stehe, für den Fall ist, dass ich etwas falsch eingebe. was ist falsch und was ist schreiben? ein Beispiel geben. –

+0

Er möchte sagen, wenn er die Größe des Textes in EditText beschränkt, dann, wenn der Benutzer etwas eingibt, das er nicht eingeben möchte und es einmal korrigieren möchte, dann würde das Unannehmlichkeiten verursachen. – Hiral

2

Sie müssen Benutzereingaben validieren Ihre Erwartungen zu erfüllen. Wenn das erfüllt ist, dann rufen Sie nur et2.requestFocu()

+0

Das Problem ist, dass ich selbst nicht weiß, was gültig ist und was nicht. (ZB: alle vierstelligen Zahlen sind gültig, und wenn der Benutzer ändern muss, was er eingegeben hat, ist es sehr mühsam) – user1667307

+0

was passiert wenn Sie rufen nicht et2.requestFocus() auf? geht es immer noch zu deinem nächsten Feld? – UVM

1

Dieser Code funktioniert wie erwartet.

etFName.setOnKeyListener(new OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if(etFName.getText().toString().length()==4 && keyCode == KeyEvent.KEYCODE_BACK) 
       { 
        typinget1 = true; 
       } 
       else if(etFName.getText().toString().length()==4 && typinget1==true)  //size as per your requirement 
       { 
        typinget1 = false; 
        etLName.requestFocus(); 

       } 
       else if(etFName.getText().toString().length()<=4 && typinget1==false) 
       { 
        typinget1 = true; 

       } 

       return false; 
      } 
     }); 
2

Es ist für mich arbeiten:

final EditText code1=((EditText)view.findViewById(R.id.code1)); 
    final EditText code2=((EditText)view.findViewById(R.id.code2)); 
    final EditText code3=((EditText)view.findViewById(R.id.code3)); 
    final EditText code4=((EditText)view.findViewById(R.id.code4)); 



    OnKeyListener key=new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if(!((EditText) v).toString().isEmpty()) 
      v.focusSearch(View.FOCUS_RIGHT).requestFocus(); 

      return false; 
     } 
    }; 




    code1.setOnKeyListener(key); 
    code2.setOnKeyListener(key); 
    code3.setOnKeyListener(key); 
24

Es könnte sehr spät, aber ich habe eine Lösung, die viel einfacher anzuwenden ist. Nur fügen Sie diesen Code dem Feld edittext in der Datei layout.xml hinzu. Fügen Sie dies zu edittext, den Sie möchten zeigen Sie eine nächste Schaltfläche statt einer Schaltfläche "Fertig". So wird auf das nächste Edittext-Feld zeigen.

android:imeOptions="actionNext" 
+1

Für alphanumerischen Eintrag (Standard von Edittext) auch hinzufügen Android: SingleLine = "True" – Kay

-3

Ich habe sehr einfache Lösung für diese nur

folgende Eigenschaft in xml EditText Kontrolle gestellt android: input = "textPersonName"

11

Wenn Sie geben neben EditText konzentrieren wollen gedrückt Sie können diese Optionen bei XML-Code verwenden, um den nächsten EditText zu fokussieren:

Option 1:

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:imeOptions="actionNext" 
    android:singleLine="true"/> 

Option 2:

<EditText 
    android:id="@+id/et1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true" 
    android:nextFocusForward="@+id/et2"/> 

<EditText 
    android:id="@+id/et2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true"/>