android edittext onchange监听器

pro*_*ngs 102 android textwatcher android-edittext

我知道一点点,TextWatcher但是对你输入的每一个角色都会发出火花.我想要一个在用户完成编辑时触发的监听器.可能吗?另外在TextWatcher我得到一个实例,Editable但我需要一个实例EditText.我怎么做到的?

编辑:第二个问题更重要.请回答.

Cat*_*ata 197

首先,如果EditText失去焦点或用户按下完成按钮,您可以看到用户是否完成了对文本的编辑(这取决于您的实现以及最适合您的内容).其次,你不能让一个EditText在中实例TextWatcher只有当你已经宣布EditText为一个实例对象.即使你不应该编辑EditText内部TextWatcher因为它不安全.

编辑:

为了能够将EditText实例纳入您的TextWatcher实现,您应该尝试这样的事情:

public class YourClass extends Activity {

    private EditText yourEditText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
        yourEditText = (EditText) findViewById(R.id.yourEditTextId);

        yourEditText.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {

                // you can call or do what you want with your EditText here

                // yourEditText... 
            }

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

            public void onTextChanged(CharSequence s, int start, int before, int count) {}
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,上面的示例可能有一些错误,但我只想向您展示一个示例.


RNG*_*Guy 13

令我困扰的是,为我的所有EditText字段实现一个监听器要求我有丑陋,冗长的代码,所以我编写了下面的类.对任何绊脚石的人都有用.

public abstract class TextChangedListener<T> implements TextWatcher {
    private T target;

    public TextChangedListener(T target) {
        this.target = target;
    }

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

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

    @Override
    public void afterTextChanged(Editable s) {
        this.onTextChanged(target, s);
    }

    public abstract void onTextChanged(T target, Editable s);
}
Run Code Online (Sandbox Code Playgroud)

现在实现一个监听器有点清洁.

editText.addTextChangedListener(new TextChangedListener<EditText>(editText) {
            @Override
            public void onTextChanged(EditText target, Editable s) {
                //Do stuff
            }
        });
Run Code Online (Sandbox Code Playgroud)

至于它发射的频率,可以在//Do stuff给定的a之后执行检查以运行他们想要的代码

  • 这对我来说非常有效,节省了很多代码行!你真是天才! (2认同)

Pra*_*ash 12

任何人使用ButterKnife.您可以使用:

@OnTextChanged(R.id.zip_code)
void onZipCodeTextChanged(CharSequence zipCode, int start, int count, int after) {

}
Run Code Online (Sandbox Code Playgroud)


Xar*_*mer 6

我用它完成了AutotextView:

AutotextView textView = (AutotextView) findViewById(R.id.autotextview);
textView.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
        seq = cs;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int arg1, int arg2, int arg3) {

    }

    @Override
    public void afterTextChanged(Editable arg0) {
        new SearchTask().execute(seq.toString().trim());
    }

});
Run Code Online (Sandbox Code Playgroud)