5

每当EditText更改字符串时,onTextChanged都会调用。

现在,当我开始一个新的Activity并通过发送数据时BundleonTextChanged不会调用。

if( getIntent().getExtras() != null) {
    Bundle b = getIntent().getExtras();
    int value = -1;

    if(b != null)
        value = b.getInt("key");
    edit1.setText("Mywords:");
}

我怎么称呼它?

4

4 回答 4

7

所以这是您的代码的修改版本。这个想法是EditText在你添加一个之后设置文本TextWatcher

if( getIntent().getExtras() != null) {
    Bundle b = getIntent().getExtras();
    int value = -1;

    if(b != null)
        value = b.getInt("key");

    // Add  the TextWatcher here
    edit1.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // Toast.makeText(MainActivity.this, "before text changed", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // Toast.makeText(MainActivity.this, "on text changed", Toast.LENGTH_LONG).show();
        }

        @Override
        public void afterTextChanged(Editable s) {
            // Toast.makeText(MainActivity.this, "after text changed", Toast.LENGTH_LONG).show();
        }
    });

    // Now the set the value in your EditText
    edit1.setText("Mywords:");
}
于 2016-08-28T10:28:48.623 回答
3

确保您在调用TextWatcher之前订阅。setText

于 2016-08-28T10:19:52.480 回答
1

出于某种原因,addTextChangedListener我没有调用该方法。

然而方法doBeforeTextChangeddoOnTextChanged并且doAfterTextChanged完美地工作:

amountTextField.doBeforeTextChanged { text, start, count, after ->
    Log.d(TAG, "beforeTextChange.") // OK, called
}
amountTextField.doOnTextChanged { text, start, before, count ->
    Log.d(TAG,  "onTextChanged.") // OK, called
}
amountTextField.doAfterTextChanged {
    Log.d(TAG, "afterTextChanged.") // OK, called
}
amountTextField.addTextChangedListener {
    object:  TextWatcher {
        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            Log.d(TAG, "beforeTextChange.") // NOK, not called
        }

        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            Log.d(TAG,  "onTextChanged.") // NOK, not called
        }

        override fun afterTextChanged(p0: Editable?) {
            Log.d(TAG,  "onTextChanged.") // NOK, not called
        }

    } }

顺便说一句,结果总是一样的:无论我是否为我的 EidtText 设置了任何文本,无论是在我设置任何文本之后还是之前。

于 2022-02-07T15:14:52.627 回答
0

尝试以下操作:

edit1.addTextChangedListener(new TextWatcher() {

        public void afterTextChanged(Editable s) {}

        public void beforeTextChanged(CharSequence s, int start,
                                      int count, int after) {
        }

        public void onTextChanged(CharSequence s, int start,
                                  int before, int count) {
        }
    });

参考:Android on Text Change Listener

于 2016-08-28T10:00:44.197 回答