2013-03-27 2 views
1

Мое приложение должно открыть файл внутри edittext, чтобы показать его пользователю. Если пользователь хочет изменить его, просто нажмите внутри textwiew и напишите его. После этого, когда кнопка назад нажата, если текст был изменен, изменения должны быть сохранены, иначе просто закройте текущую активность и перейдите к родительскому. Есть ли способ увидеть, был ли отредактирован текст? Моя идея - явно сравнить длину файла и edittext, но есть что-то лучше, чем этот «грубый» метод?Проверьте, был ли изменен EditText

ответ

3

Вы можете использовать TextWatcher:

boolean changed = false; 
EditText edit = (EditText)findViewById(R.id.medittext); 
    edit.addTextChangedListener(new TextWatcher() { 

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

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

      changed = true; 



     } 

    }); 

Просто сравнение длины может привести к ложным отрицательным, если эти изменения имеют такую ​​же длину, удалений в тексте.

Когда пользователь нажимает назад, просто проверьте, соответствует ли значение changed. Это может привести к ложному положительному результату, если пользователь сделал редактирование, а затем расстегнул его, но лучше иметь несколько ложных срабатываний, чем потерять пользовательские изменения.

3

Ничего лучше, на самом деле вам нужно сравнить текст, а не длину. Пользователь может просто заменить слово. TextWatcher сообщит вам, что пользователь редактирует, но он просто может изменить и изменить его. Поэтому вам действительно нужно сравнить строки.