我正在尝试将EditText视图的显示值替换为字符,同时将原始输入保留在另一个StringBuilder对象中。
代码如下:
final StringBuilder stringBuilderHiddenPassword = new StringBuilder();
final StringBuilder mPass = new StringBuilder();
pass = new StringBuilder();
etPassword.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) {
stringBuilderHiddenPassword.append("*");
etPassword.removeTextChangedListener(this);
etPassword.setText(stringBuilderHiddenPassword);
etPassword.addTextChangedListener(this);
}
@Override
public void afterTextChanged(Editable s) {
pass.append(s);
Toast.makeText(Pass.this, pass, Toast.LENGTH_SHORT).show();
}
});
第一个输入的字符在 Toast 中显示为输入的原始字符,但第二个字符会向其添加*
。因此,如果我输入a
它会显示a
,如果我输入aa
,它会显示aa*
,aaa
它是aa*a**
等等。
如何将这些对象与同时追加的对象分开?代码应该附加到stringBuilderHiddenPassword
,但很明显这不是这种方法的工作方式。
通过在原始字符串上使用replace
方法找到了解决方案:
replace = pass.toString().replace("*", "");
Toast.makeText(Pass.this, replace, Toast.LENGTH_SHORT).show();