我对TextWatcher
略知一二,但它会在您输入的每个字符上触发。我想要一个监听器,每当用户完成编辑时都会触发。有可能吗?同样在TextWatcher
中,我得到了Editable
的一个实例,但我需要一个EditText
的实例。我该怎么做呢?
编辑:第二个问题更重要。请回答这个问题。
发布于 2012-06-21 16:23:40
首先,您可以查看如果EditText
失去焦点或者用户按下done按钮,用户是否完成了对文本的编辑(这取决于您的实现和最适合您的方式)。其次,只有在将EditText
声明为instance对象时,才能在TextWatcher
中获取EditText
实例。即使您不应该在TextWatcher
中编辑EditText
,因为它不安全。
编辑:
为了能够将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) {}
});
}
}
请注意,上面的示例可能有一些错误,但我只是想向您展示一个示例。
发布于 2016-09-22 03:05:55
让我困扰的是,为我所有的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);
}
现在实现一个侦听器就更清晰了。
editText.addTextChangedListener(new TextChangedListener<EditText>(editText) {
@Override
public void onTextChanged(EditText target, Editable s) {
//Do stuff
}
});
至于它触发的频率,可以在给定的
发布于 2016-06-18 01:05:01
任何使用ButterKnife的用户。您可以使用like:
@OnTextChanged(R.id.zip_code)
void onZipCodeTextChanged(CharSequence zipCode, int start, int count, int after) {
}
https://stackoverflow.com/questions/11134144
复制相似问题