【问题标题】:TextWatcher StringBuilder append method appends CharSequence to both StringBuilder objectsTextWatcher StringBuilder append 方法将 CharSequence 附加到两个 StringBuilder 对象
【发布时间】:2017-12-10 19:48:46
【问题描述】:

我正在尝试用字符替换 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,但很明显这不是这个方法的工作原理。

【问题讨论】:

    标签: java android append stringbuilder


    【解决方案1】:

    通过对原始字符串使用replace方法找到了解决方案:

    replace = pass.toString().replace("*", "");
    Toast.makeText(Pass.this, replace, Toast.LENGTH_SHORT).show();
    

    【讨论】:

    • 不,这不是你应该做的,你应该使用自定义 TransformationMethod 代替,文档说:“TextView 使用 TransformationMethods 来做一些事情,比如用点替换密码的字符,或防止换行符在单行文本字段中引起换行符。"
    猜你喜欢
    • 2018-09-22
    • 2011-12-31
    • 2015-08-08
    • 2016-09-27
    • 1970-01-01
    • 2018-07-15
    • 2011-05-15
    • 2016-04-05
    • 2013-06-23
    相关资源
    最近更新 更多