关于EditText的输入监听事件TextWatcher,重写里面的方法时,看到里面的参数异常,如下:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
i、i1、i2都是些什么东西?
原因是:编译时的SDK没有关联源码导致的。比如我的build.gradle中的android领域是这样的:
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.lindroid.edittextdemo"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
可以看到我编译时使用的SDK版本是25,那么它的源码呢?我们可以按照以下的步骤打开SDKManager查看一下:
查看Sources for Android SDK:
显示,由于编译的SDK版本没有关联源码,所以给出来的参数名字显示得都不正常。搞清楚了原因,解决方法就容易找了,可以采取下面两种中的一种:
1. 修改compileSdkVersion,将其改为你已经下载了Sources for Android SDK的版本的SDK;
2. 这个方法也是我推荐,直接把编译器需要的源码包下载好就可以,不用老是去修改gradle。
完成之后,重新复写其中的方法就可以看到参数正常显示了:
editText.addTextChangedListener(new TextWatcher() {
@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) {
}
});
网友评论