2016-01-21 3 views
0

У меня есть 4 редактирование текстов в Управлении с пределом ввода 3 символа.
Я хочу реализовать поведение, когда пользователь вводит 3 символа в предыдущий текст редактирования - следующее редактирование должно автоматически фокусироваться. Наоборот: когда пользователь начинает удалять с конца последнего текста редактирования, пользователь может удалять символы во всех предыдущих полях без ручного выбора каждого текста редактирования.
Что такое самый простой способ реализовать это?Android последовательные EditTexts

Я могу думать только об использовании keyListenners для каждого EditText, проверять длину текста и фокусировку переключателя, когда он равен максимальному значению.

Правильно ли это или есть какие-либо другие решения?

+0

Показать код, который вы работаете в настоящее время, в том числе макет пожалуйста. –

+0

Используйте TextWatcher, вы также можете проверить счетное решение здесь http://stackoverflow.com/questions/4310525/counting-chars-in-edittext-changed-listener –

+0

Спасибо. И как лучше переключаться с одного на другой edittext? – Androider

ответ

1

Я думаю, что это лучший способ.

Я бы попробовать что-то вроде:

firstText.addTextChangedListener(new TextWatcher(){ 
    public void afterTextChanged(CharSequence s) {} 
    public void beforeTextChanged(CharSequence s, int start, int count, int after){} 
    public void onTextChanged(CharSequence s, int start, int before, int count){ 
     if(s.toString().length() == 3){ 
      sedoncText.setFocusableInTouchMode(true); 
      sedoncText.requestFocus(); 
     } 
    } 
}); 

Я не проверял это так, может быть, некоторые из функций, которые точно не написаны правильно.

Надеюсь, это поможет.

1

Вы можете использовать TextWatcher для этой работы. Короткий фрагмент кода:

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

Для вашей задачи, каждый EditText нужен свой TextWatcher (в том числе логики specifig).

UPDATE:

Короткий (непроверенные) идея, как переключаться EditText при удалении:

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

Вы сохраняете статус (если EditText когда-либо была заполнена) в переменной-члена.

+0

и как управлять удалением символов, поэтому, когда я перехожу в предыдущее поле, когда удаляют все символы в последнем поле? – Androider

1

В EditText добавить

android:maxLength="3" 

Это не позволит ввод более 3 символов.

И сосредоточиться на следующем EditText смотрите ссылку ниже

Link: Move focus to next edittext

Смежные вопросы