我想在用户点击一些EditText
后检查某些Button
中的文字是否已更改。但View#isDirty
似乎没有返回EditText
的正确状态,如果在onClick
内调用的话。例如,我写了这样的东西:
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()
是否有正确的方法?
答案 0 :(得分:0)
我建议使用: https://stackoverflow.com/a/9459848/5684335
Okas的评论是一个很好的解释原因。
答案 1 :(得分:0)
当您单击按钮时,edittext不再脏 - 文本已更新并重新查看视图。也许如果你改变你的onclick处理程序,你会更好地理解发生了什么。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editText = (EditText) findViewById(R.id.e);
System.out.println((editText.isDirty() ? "is dirty" : "is clean"));
}
});
只要视图尚未重绘,isDirty将返回true。这种情况很快发生,基本上你没有(也就是不需要)对此进行任何控制。 我认为您需要使用其他一些方法来实现您想要的目标。