onFocusChange()的作用类似于textChanged()

时间:2012-03-02 15:46:55

标签: android android-edittext onfocus

我在我的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应如何工作的见解,以及为什么它对我来说都是如此。

提前谢谢。

2 个答案:

答案 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;
        }
    });