做Android开发稍微久一点的都知道,android之前的监听器基本都是setlistener,比如setOnClickListener,setTextChangeListener。
但是后来,android中很多的setlistener都被废弃了,用addlistener来替代,比如上面的setTextChangeListener。
本文主要就是用于探讨setlistener和addlistener的区别。
我们就以setOnClickListener和addTextChangedListener举例
1、查看源码
/**
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
/**
* Adds a TextWatcher to the list of those whose methods are called
* whenever this TextView's text changes.
* <p>
* In 1.0, the {@link TextWatcher#afterTextChanged} method was erroneously
* not called after {@link #setText} calls. Now, doing {@link #setText}
* if there are any text changed listeners forces the buffer type to
* Editable if it would not otherwise be and does call this method.
*/
public void addTextChangedListener(TextWatcher watcher) {
if (mListeners == null) {
mListeners = new ArrayList<TextWatcher>();
}
mListeners.add(watcher);
}
可以看到,setListener直接是给View中的一个listener赋了值。
而addListener是将该listener添加到了一个arraylsit集合里面。
从这里我们可以猜测,setListener只能设置一个,addListenr可以设置多个。
下面我们来看看具体。
2、测试setListener
我在xml中设置了一个按钮<Button
android:id="@+id/btn_test_se