You can use a TextWatcher for this job.
A short code snippet:
editTextA.addTextChangedListener(new TextWatcher() {
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                   // implement your logic here
                   // e.g. Set cursor to the end of another Textfield:
                   if (s.toString().length() > 2){
                      int position = editTextB.length();
                      editTextB.setSelection(position);
                    }
                }
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void afterTextChanged(Editable s) {
                    // TODO Auto-generated method stub
                }
});
For your task, every EditText needs his own TextWatcher (Including the specifig logic).
UPDATE:
A short (untested) idea how to switch EditText when deleting:
private boolean isEditTextVirgin;
isEditTextVirgin = true;
editTextB.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // Check if the TextView is filled before editing
                // if yes then save this information for later
                if (s.toString().length() > 0){
                    isEditTextVirgin = false;
                }
            }
            @Override
            public void afterTextChanged(Editable s) {
                // Check if the EditText is empty after a edit and if it was filled before
                // if both yes then jump the the previous EditText
                if (s.toString().length() == 0 && isEditTextVirgin == false){
                    int position = editTextA.length();
                    editTextA.setSelection(position);
                    // if you want you can reset your variable
                    // isEditTextVirgin = true;
                }
            }
});
You are saving a status (if the edittext ever was filled) in a member variable.