最近维护以前的开发人员写的一段代码的时候,发现某个列表中复用的EditText中不停的在addTextWatcher,而且是不断的new 一个新TextWatcher进去,而且还有不停的在添加多个不同种的TextWatcher。这样毫无疑问是有问题的。
很碰巧的是EditText没有提供批量只有一个removeTextChangedListener
那么如何批量移除?
就做一个简单反射吧。
public static void removeAllTextChangedListener(EditText editText) {
if (editText != null) {
try {
Class clazz = Class.forName("android.widget.TextView");
Field field = clazz.getDeclaredField("mListeners");
field.setAccessible(true);
field.set(editText, null);
} catch (NoSuchFieldException | IllegalAccessException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}