【发布时间】:2016-12-26 14:26:02
【问题描述】:
我想检查某些EditText 中的文本是否在用户单击某些Button 后发生更改。但是如果在onClick 内部调用,View#isDirty 似乎不会返回EditText 的正确状态。例如,我写了这样的东西:
public class MainActivity extends Activity {
EditText editText;
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.f);
editText = (EditText) findViewById(R.id.e);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println((editText.isDirty() ? "is dirty" : "is clean"));
}
});
}
}
在我对editText 进行任何更改之前,它会按预期输出is clean。但是即使我在editText中写了一些东西,也会打印相同的is clean。
什么时候会调用isDirty?这是正确的方法吗?
更新:
我还想检查一些 Switch 和 Spinner 值是否发生了变化。 isDirty() 是正确的做法吗?
【问题讨论】:
-
您好,您找到最佳解决方案了吗?我目前在我的应用中面临同样的问题。
-
@AbdulMateen 嗨。已经很长时间了,但我想我最终扩展了自己的表单输入类,该类将保持其状态(文本、已检查、项目...取决于输入类型)并在提交表单之前检查它是否已更改。这样我也可以对输入进行一些验证。
-
@AbdulMateen 关键是,如果我没记错的话,isDirty() 并没有像我想象的那样做。不管怎样,从那以后我就离开了 Android,也许在新的 SDK 版本中有一个内部机制。
-
SDK 还没有相应的机制。编写我自己的自定义解决方案:/