Search code examples
androidandroid-edittext

How to change the focus to next edit text in android?


enter image description here

The User can enter only one digit in the edit text. if he enters the value in edtText1, I want the cursor automatically moves to edtText2 and so on. The user can able to edit the text which he/she has entered already. I tried the following way.

    edtPasscode1.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if (edtPasscode1.getText().length() == 1)
                edtPasscode2.requestFocus();
            return false;
        }
    });

    edtPasscode2.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if (edtPasscode2.getText().length() == 1)
                edtPasscode3.requestFocus();
            return false;
        }
    });

    edtPasscode3.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if (edtPasscode3.getText().length() == 1)
                edtPasscode4.requestFocus();
            return false;
        }
    });

If the user edit the text, The cursor moves to some other editTexts and not working as desired. How can i achieve the above?


Solution

  • Try TextWatcher instead of onKeyListener

    B'coz if want to edit your password, in that case TextWatcher will give you more method to dealt with..

    Edited:-

    StringBuilder sb=new StringBuilder();
    
             edtPasscode1.addTextChangedListener(new TextWatcher() {
                 public void onTextChanged(CharSequence s, int start, int before, int count) {
                     // TODO Auto-generated method stub
                     if(sb.length()==0&edtPasscode1.length()==1)
                     {
                         sb.append(s);
                         edtPasscode1.clearFocus();
                         edtPasscode2.requestFocus();
                         edtPasscode2.setCursorVisible(true);
    
                     }
                 }
    
                 public void beforeTextChanged(CharSequence s, int start, int count,
                         int after) {
    
                     if(sb.length()==1)
                     {
    
                         sb.deleteCharAt(0);
    
                     }
    
                 }
    
                 public void afterTextChanged(Editable s) {
                     if(sb.length()==0)
                     {
    
                         edtPasscode1.requestFocus();
                     }
    
                 }
             });
    

    Hope this work.