Android视图isDirty里面的onClick

时间:2016-12-26 14:26:02

标签: android view

我想在用户点击一些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被召唤?这是完全正确的方法吗?

更新:

我还想检查是否更改了某些SwitchSpinner值。 isDirty()是否有正确的方法?

2 个答案:

答案 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。这种情况很快发生,基本上你没有(也就是不需要)对此进行任何控制。 我认为您需要使用其他一些方法来实现您想要的目标。