簡體   English   中英

TextWatcher 沒有執行幾個 setText 行

[英]TextWatcher not executing several setText llines

使用 TextWatcher 更改字母,它似乎只執行最后一行(例如,它將c更改為3但忽略之前的更改。如果我刪除最后一行(c 到 3)它只會開始將b更改為2 。我不確定這是為什么或如何解決它。(Java 對我來說是新手)

public class MainActivity extends AppCompatActivity {

TextWatcher tt = null;

private TextView textView;
private EditText editText;

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

    final EditText et = (EditText) findViewById(R.id.editText);
    final TextView tv = (TextView) findViewById(R.id.textView);

    tt = 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) {

            et.removeTextChangedListener(tt);
            tv.setText(et.getText().toString().replace("a", "1"));
            tv.setText(et.getText().toString().replace("b", "2"));
            tv.setText(et.getText().toString().replace("c", "3"));
            et.addTextChangedListener(tt);


        }

        @Override
        public void afterTextChanged(Editable s) {

                et.setSelection(s.length());

        }
    };
    et.addTextChangedListener(tt);

在提供的代碼中,為TextView執行了 3 次setText 因此,它只保留最后一次調用的結果。 如果要顯示所有替換的結果,請在單個字符串中執行:

et.removeTextChangedListener(tt);
tv.setText(et.getText().toString().replace("a", "1").replace("b", "2").replace("c", "3"));
et.addTextChangedListener(tt);

編輯

當然,您可以逐步執行轉換:

et.removeTextChangedListener(tt);
String s = et.getText().toString();
s = s.replace("a", "1");
s = s.replace("b", "2");
s = s.replace("c", "3");
tv.setText(s);
et.addTextChangedListener(tt);

方法String.replace並沒有改變String,而是返回一個新的,所以我們需要重新分配每個替換的結果(我只是一次又一次地分配給s ,以防止未使用的引用)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM