Android EditText:检测用户输入更改与加载数据更改
我有一个带有活动的应用程序。此活动有一个Android EditText:检测用户输入更改与加载数据更改,android,android-edittext,Android,Android Edittext,我有一个带有活动的应用程序。此活动有一个EditText字段。此字段与活动方法onStart() 现在,用户可以编辑其姓名并导航到下一个活动。我想检测用户是否确实做了任何更改,或者不提示他保存更改 例如,用户名是“Sam Jones”,他不编辑它,我不想提示他保存。但是如果他把它改成“Sam”,那么我想提醒他 因此,我在这个EditText字段中添加了一个TextWatcher。我创建了一个布尔标志“maked_CHANGES”,我正在按照下面的说明更改此标志 TextWatcher textW
EditText
字段。此字段与活动方法onStart()
现在,用户可以编辑其姓名并导航到下一个活动。我想检测用户是否确实做了任何更改,或者不提示他保存更改
例如,用户名是“Sam Jones”,他不编辑它,我不想提示他保存。但是如果他把它改成“Sam”,那么我想提醒他
因此,我在这个EditText
字段中添加了一个TextWatcher
。我创建了一个布尔标志“maked_CHANGES”,我正在按照下面的说明更改此标志
TextWatcher textWatcher = 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) {
MADE_CHANGES = true;
}
@Override
public void afterTextChanged(Editable editable) {
}
但是,此方法甚至被活动的onStart
方法调用。可以理解,因为EditText
正在从空字段更改为“Sam Jones”。因此,即使用户没有对其姓名进行任何更改,我的“保存”提示也会出现
在排除由
onStart
触发的初始首次数据加载事件时,是否有优雅的解决方案来检查用户是否更改了EditText?在onStart()
中设置文本时,首先删除TextWatcher
if(textWatcher != null){
myEditText.removeTextChangedListener(textWatcher);
}
并在设置文本后再次添加它。对于这种方法,您必须使
TextWatcher
成为类的一个字段。在开始运行活动时,onStart发生,然后OnResume发生,这样您就可以使用一个标志:
private boolean isloaded;
@Override
protected void onResume() {
super.onResume();
isloaded=true;
}
@Override
protected void onStart() {
super.onStart();
isloaded=false;
}
在onCreate中:
txt.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) {
if (isloaded)
MADE_CHANGES = true;
}
@Override
public void afterTextChanged(Editable editable) {
}
});