处理EditText焦点的事件

172

有人能为我建议与EditText焦点相关的事件吗? 我的应用程序包含一个EditText,它接受其中的URL。

现在我的问题是,在用户输入字段中的URL并进一步移动之后,没有任何点击事件,即焦点将从EditText移开时,它应检测已输入的URL并转到服务器。

如果我使用Json解析获取回复,那将更方便。

4个回答

554

以下是焦点监听器的示例。

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        if (hasFocus) {
            Toast.makeText(getApplicationContext(), "Got the focus", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Lost the focus", Toast.LENGTH_LONG).show();
        }
    }
});

在焦点更改监听器内的片段中,我无法更新我的UI,有什么想法吗? - moDev
4
这种方法行不通。如果在某些设备上通过“回车”或隐藏键盘按钮隐藏了键盘,那么“失去焦点”的事件将不会被触发。如果您再次聚焦于编辑文本框,它也不会触发“获得焦点”的事件。 - SnowWolf
1
请注意,如果您的布局设置为在显示软键盘时调整大小,或者使用TextWatcher执行与UI相关的操作,则监听器可能会被频繁调用 - 即使每个字符输入两次!https://dev59.com/8mUq5IYBdhLWcg3wKtXs - M_M

36

在 Kotlin 中,它会看起来像这样:

editText.setOnFocusChangeListener { _, hasFocus ->
    if (hasFocus) {
        toast("focused")
    } else {
        toast("focuse lose")
    }
}

20
  1. 在类顶部声明EditText对象:

  2. EditText myEditText;
    
  3. 在onCreate函数中查找EditText并设置EditText的setOnFocusChangeListener:

  4. myEditText = findViewById(R.id.yourEditTextNameInxml); 
    
    myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                 @Override
                 public void onFocusChange(View view, boolean hasFocus) {
                     if (!hasFocus) {
                          Toast.makeText(this, "Focus Lose", Toast.LENGTH_SHORT).show();
                     }else{
                         Toast.makeText(this, "Get Focus", Toast.LENGTH_SHORT).show();
                     }
    
                 }
             });
    

它运作良好。


4
对于那些上述有效解决方案不起作用的人,这里有另一个解决方法。
 searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean isFocused) {
            if(!isFocused)
            {
                Toast.makeText(MainActivity.this,"not focused",Toast.LENGTH_SHORT).show();

            }
        }
    });

这个方法可行,但我不明白为什么上面的解决方案对我无效。 - shruti iyyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接