我可以得到旧的价值。但是我没有办法输入新的 值。
事实上,我想将旧值与新值分开。
例如:如果oldText=hello
并且新输入的EditText值等于(hello w
或w hello
),则我想要newText=w
。
public class MyTextWatcher implements TextWatcher {
private String oldText = "";
private String newText = "";
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
this.oldText = s.toString();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
}
感谢帮助。
答案 0 :(得分:2)
尝试以下代码:
public class MyTextWatcher implements TextWatcher {
private String oldText = "";
private String newText = "";
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
this.oldText = s.toString();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
newText = s.toString().replace(oldText, "").trim();
}
@Override
public void afterTextChanged(Editable s) {
}
}
有关文本监视程序的信息: Differences between TextWatcher 's onTextChanged, beforeTextChanged and afterTextChanged
答案 1 :(得分:1)
通过start
方法中的count
和onTextChanged
参数,您可以计算并获取新的类型化值。
调用此方法是为了通知您
s
内的count
以start
开头的字符刚刚替换了具有 长度before
。尝试从中更改s
是错误的 此回调。
因此您可以:
public class MyTextWatcher implements TextWatcher {
private String newTypedString = "";
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
newTypedString = s.subSequence(start, start + count).toString().trim();
}
@Override
public void afterTextChanged(Editable s) {
}
}