【问题标题】:when setText on editText TextWatcher.onTextChanged not called当 setText on editText TextWatcher.onTextChanged 没有被调用
【发布时间】:2017-01-04 12:41:44
【问题描述】:

每当EditText 字符串改变时,onTextChanged 就会被调用。

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

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

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

我怎么称呼它?

【问题讨论】:

    标签: java android inner-classes android-textwatcher


    【解决方案1】:

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

    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:");
    }
    

    【讨论】:

    • 工作正常。谢谢
    • 很高兴知道这有帮助!
    【解决方案2】:

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

    【讨论】:

    • 你的意思是实现 TextWatcher 类?
    • 我的意思是对edit1.addTextChangedListener的调用应该在edit1.setText之前。
    【解决方案3】:

    尝试以下方法:

    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

    【讨论】:

    • 我已经以同样的方式使用它,你的意思是每次使用 setText 更改文本时我都必须每次都创建内部类?
    • 不,您不必每次都创建内部类,请给我们您的代码以帮助您。
    猜你喜欢
    • 2016-11-04
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    相关资源
    最近更新 更多