onFocusChange不适合我

时间:2014-07-31 05:53:03

标签: android

我想在焦点离开TextEdit框时消失键盘。我已经仔细搜索了stackoverflow和谷歌的答案,并尝试了我看过的每一个回复/文章,但似乎没有什么对我有用。

很多人,我对Android开发很新。我必须忽略一些细节,但无济于事。

我目前的实施(再次,我尝试了很多解决方案)如下:

我的班级实施OnFocusChangeListener。在调用super OnCreate之后setContentView

EditText editText = (EditText) findViewById(R.id.text_box);<br> editText.setOnFocusChangeListener(this);

@Override
public void onFocusChange(View v, boolean hasFocus) { Log.d(TAG, "--> onFocusChange"); }

但我从未看到过Log消息。

有时我认为onFocusChange不是我认为的那样。我的想法是,当我们触摸textedit字段时,这个视图会获得焦点,当你触摸屏幕的任何其他区域时,说一个按钮/列表框/等等textedit会失去焦点并且应该调用onFocusChange,但事实并非如此,我从未看到过日志条目。

澄清我使用的是Android Studio并创建了一个使用片段的应用程序可能很有用。

所以,我在Detail Activity上执行此操作,而Detail Activity又是片段的一部分。我也尝试在片段的onActivityCreated上进行。

这两种方法都不适合我。

我可以在这里找到什么想法?

我非常感谢你的评论。

3 个答案:

答案 0 :(得分:0)

editText.setFocusableInTouchMode(true);

先尝试一下吗?

在让焦点事件触发之前,您需要使该字段具有可聚焦性。但我想在这种情况下它并没有帮助你:(

答案 1 :(得分:0)

edittext.requestFocus();

试试这个:

       EditText editText = (EditText) findViewById(R.id.text_box);
       editText.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) 
        {
            if (hasFocus == true){
                edittext.requestFocus();
            }
            else{
                InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
            }
        }
    });

答案 2 :(得分:0)

onFocusChangeListener是一个接口,当您尝试像以前一样实现该接口时,还需要传递您想要被观察的上下文,因此在实践中必须观察到ViewHolder的其中一个视图元素,对吗?所以你可以这样纠正 例如,假设您要检查EditText何时聚焦:

editText.onFocusChangeListener = this

即使您在实现OnFocusChangeListener时位于Adapter或ViewHolder中,也可以将相应的类分配给要在焦点发生变化时受到监督的Context。