实现文本观察器后,我在textview中只得到字符串的第一个字符?

时间:2016-06-10 04:21:11

标签: android textwatcher

我有这个字符串:

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

   }

问题:

对于第二个和第三个" __"(下划线)我只看到字符串的第一个字符,而不管用户输入了多少个字符。

1 个答案:

答案 0 :(得分:0)

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

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