В приложении Android у меня есть EditText
, который должен заменить определенные строки значениями из данных приложения.
например если пользователь вводит $username
, его следует заменить именем того пользователя, который в данный момент вошел в систему.
Параметр Editable
в методе afterTextChanged()
TextWatcher
, примененном к EditText
, заменяет $username
на правильное значение, но проблема в том, что после замены $username
на действительное имя пользователя, если я нажимаю любой символ после этого к нему добавляется username
, за которым следует нажатый символ.
например.
Скажите, что текущее имя пользователя Joe
а. если ввод Hi this is @username
б. afterTextChanged()
меняет его на Hi this is Joe
с. Теперь, если я нажимаю любой другой символ (скажем, я нажимаю g ИЛИ пробел), тогда текст в EditText
меняется на Hi this is Joeusernameg
ИЛИ Hi this is Joeusername
Как получить вывод, как на шаге b
?
etTemplateMessage.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) {
final String strUserNameCode = "$username";
String text = s.toString();
if(text.contains(strUserNameCode)){
int startIndex = text.indexOf(strUserNameCode);
int endIndex = startIndex + strUserNameCode.length();
Editable profileName = new SpannableStringBuilder(FileUtil.getUTF8String(settingDTO.getProfileName()));
s.replace(startIndex, endIndex, profileName);
}
}
});