0

我在我的 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 应该如何工作以及为什么它以适合我的方式工作的任何见解。

先感谢您。

4

2 回答 2

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;
    }
});
于 2012-03-02T15:54:50.720 回答
0

我也遇到了这个问题,没有找到与文本更改onFocusChange()一起处理的详细信息。EditText

我确定onFocusChange()每次被调用时[editText].setText()都会被调用。在我的情况下,我想在输入完成或hasFocus()返回 false 后验证输入文本。该验证之后是设置文本 agian。所以这两个过程onFocusChange()互相[editText].setText()打断。

解决方案 知道何时编辑文本已完成编辑

通过使用这样的东西

 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;
        }
    });
于 2014-06-20T09:55:42.403 回答