在Android应用中,我有一个EditText
,应该用应用数据中的值替换某些字符串。
例如如果用户键入$username
,则应将其替换为当前登录用户的名称。
在{{1}上应用Editable
的{{1}}方法中的afterTextChanged()
参数用正确的值替换了TextWatcher
,但是问题是在{{1 }}被替换为实际的用户名,如果我在按下任何字符后再附加EditText
,然后再按下字符。
例如
说当前登录的用户名是$username
a。如果输入是$username
b。 username
更改为Joe
c。现在,如果我按任何其他字符(例如我按g OR空格),则Hi this is @username
中的文本将变为afterTextChanged()
或Hi this is Joe
如何像步骤EditText
一样获得输出?
Hi this is Joeusernameg
答案 0 :(得分:2)
在afterTextChange方法上,应将文本设置为编辑文本。并且String具有replace(CharSequence旧,CharSequence新)方法,您也可以使用它。 像这样
PublishSubject publishSubject = PublishSubject.create();
publishSubject.debounce(200, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(query -> onTextChanged(query.toString()));
void onTextChanged(String text){
final String strUserNameCode = "$username";
etTemplateMessage.setText(text.replace(strUserNameCode, FileUtil.getUTF8String(settingDTO.getProfileName())));
}
并在aftertextChange方法上调用publishSubject.onNext( s.toString())