Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android EditText:检测用户输入更改与加载数据更改_Android_Android Edittext - Fatal编程技术网

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) {

        }
    });