【问题标题】:After implementing text watcher I am getting only first Character of the String in textview?实现文本观察器后,我在 textview 中只得到字符串的第一个字符?
【发布时间】:2016-06-10 04:21:10
【问题描述】:

我有这个字符串:

String sentence = sometext __ sometext __ sometext __ sometext.("__" = underscore)

所以代替下划线,我想实时输入用户输入的 EditText 值。这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ed1 = (EditText) findViewById(R.id.editText);
    ed2 = (EditText) findViewById(R.id.editText2);
    ed3 = (EditText) findViewById(R.id.editText3);
    tv = (TextView) findViewById(R.id.textView);


    sentence = tv.getText().toString(); //gettingthestring.

    edtv1 = ed1.getText().toString();
    edtv2 = ed2.getText().toString();
    edtv3 = ed3.getText().toString();

    callMethod();


}


private void callMethod() {


    if (ed1 != null) {
        ed1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
               sen1 =(sentence.replaceFirst("__", "___" ));

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

                tv.setText(sen1.replace("___" ,"_"+s.toString()+"_"));

            }
        });
        edtv1 = ed1.getText().toString();

    }
    callMethod2();
}

private void callMethod2() {


    if (ed2 != null) {


        ed2.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {


                sen2 = tv.getText().toString(); //got the new string
      //sen = sometext _ed1 value_ sometext __ sometext __ sometext.("__" = underscore)

                sen2 =(sen2.replaceFirst("__","___" ));

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

                tv.setText(sen2.replace("___","_"+s.toString()+"_"));

            }
        });
        edtv2 = ed2.getText().toString();

        sen2 = sentence;



    }
    callMethod3();

 //some code

   }

问题:

对于第二个和第三个“__”(下划线),无论用户输入多少字符,我只看到字符串的第一个字符。

【问题讨论】:

标签: android textwatcher


【解决方案1】:

afterTextChanged() 中,只需将更新的句子保存在一个字符串中,并将该字符串用于下一个afterTextChanged()

String update1 = txtview.getText().toString();

【讨论】:

  • 那不是“一行”。他们相当多。 :|
  • String update1 = (String) txtview.getText(); //我将更新后的字符串保存在 update1 中,并将其用于第二种方法
  • 如果您使用相关代码和 cmets 更新您的答案并删除不重要/不必要的内容,那就太好了。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多