我在我的EditText中添加了一个OnFocusChangeListener,这样当用户点击EditText视图的外部或标签时,我可以对该值进行一些验证:
EditText myEditText = (EditText) itemView.findViewById(R.id.myedittext);
myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
EditText editText = (EditText)view;
if (!hasFocus) {
validate(editText.getText().toString());
}
}
}
然而,似乎onFocusChange()方法被调用为textChanged()方法。每次我在文本字段中输入任何内容时都会调用它。我在2.2模拟器和我自己的硬件设备上尝试了这一点,它们的行为相同。
我很感激任何有关OnFocusChangeListener应如何工作的见解,以及为什么它对我来说都是如此。
提前谢谢。
答案 0 :(得分:1)
首先,您不必在onFocusChange
方法中重新声明EditText editText。 myEditText应该是在onCreate
方法中设置的类变量。我认为你的代码将它视为两个独立的实例。
然后尝试添加OnEditorActionListener
myEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
validate(myEditText.getText().toString());
return true;
}
return false;
}
});
答案 1 :(得分:0)
我也遇到了这个问题,发现没有关于处理onFocusChange()
和EditText
文字的详细信息已经更改。
我确定每次调用onFocusChange()
时都会调用[editText].setText()
。在我的情况下,我想在输入完成后验证输入文本或hasFocus()
返回false。验证之后是设置文本agian。因此,这两个流程onFocusChange()
和[editText].setText()
互相打断。
解决方案 Knowing when Edit text is done being edited
使用类似的东西
meditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
yourcalc();
return true;
}
return false;
}
});