2015-04-16 1 views
0

После того, как пользователь нажимает кнопку «Назад» на устройстве, я ищу тест для редактирования.Как протестировать Android EditTex для содержимого

Если у EditText нет контента (пользователь ничего не набрал, либо набрал какой-то ввод, а затем удалил все его обратно), вернитесь к предыдущему действию (экрану).

В противном случае, EditText имеет содержание так сгореть alertDialog, чтобы увидеть, если они хотят, чтобы «Откажитесь» вход EditText и вернуться к предыдущей деятельности (экран),

или «Отмена» AlertDialog для возврата EditText и изменить/добавить существующий вход.

код у меня есть для кнопки Назад пресса отлично работает, чтобы вернуться к предыдущей деятельности (частичный список ниже):

public boolean onKeyPreIme (int keyCode, @NonNull KeyEvent event){ 
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
     // the key has been pressed down 
     if (event.getAction() == KeyEvent.ACTION_DOWN 
       && event.getRepeatCount() == 0) {  

Я ищу помощи о том, как связать этот код с, если/затем логика для теста содержимого EditText. Я начал с:

final EditText todoEditText = (EditText) findViewById(R.id.CEditText); 
    int sTodo = todoEditText.getText().toString().trim().length(); 
     if (sTodo == 0) { 
      run code to hide the keyboard and go to the previous activity 
     } 
     else { 
      run code to show the alertDialog 
     } 

ответ

0

Хмммм ... почему бы не передать данные в строку и просто проверить, пуста ли строка?

String strTodo = todoEditText.getText().toString().trim(); 
if (!strTodo.isEmpty() && !strTodo.equalsIgnoreCase("")) { 
    // run code to hide the keyboard and go to the previous activity 
} else { 
    // run code to show the alertDialog 
} 

Большая проблема, с которой вы столкнулись, заключается в том, как вы работаете с вашими данными между действиями. Вместо этого используйте Intents и Extras для передачи данных из одного Activity в другое. Передайте ваши данные editText в строку, как я упоминал ранее в разделе «Дополнительно», к вашему следующему действию, и в следующем упражнении используйте эти данные для определения потока. Не храните Activity в стеке, чтобы вы могли вернуться к нему и начать использовать данные, которые уже есть, это плохая идея. Но если это то, что вы хотите сделать, используйте жизненный цикл Android и проверите проверки editText при возврате к предыдущей операции в onResume().

И, наконец, похоже, что вам может понадобиться слушатель. На всякий случай, вот и все.

todoEditText.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) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 

}); 
+0

Да, я видел код TextWatcher слушателя и не хотел использовать его до и после кода. Однако для вашего ответа первоначальный драйвер для тестирования содержимого EditText состоит в том, что пользователь нажал кнопку «Назад», но не набрал вход для EditText. Мысли? – AJW

+0

Прежде всего, почему вы пытаетесь перенести данные в Activity на backstack? У вас будет больше проблем, чем пытаться выяснить, есть ли текст в режиме редактирования (проблемы с памятью). Во-вторых, если вы действительно хотите это сделать, в onResume проверьте editText, как я разместил выше, и сделайте все, что пожелаете. – portfoliobuilder

+0

newb для Android здесь. Если в EditText нет входных данных, я хочу вернуть пользователя к предыдущему действию (экрану). Вы говорите, что мне нужно уничтожить текущую деятельность с помощью функции finish(), прежде чем возвращать пользователя к предыдущему действию, чтобы избежать утечек памяти? – AJW

0

Может обрабатывать функцию в onStop или onDestroy, будет лучше, если вы вернетесь к предыдущему действию. Затем вы можете проверить, является ли содержимое EditText нулевым.

String tmp = mEditText.getText().toString.trim(); 
if (null != tmp && !("").equals(tmp)) { 
    //code 
} else { 
    //code 
}