Spinner没有得到关注

Sha*_*een 21 android focus spinner

EditText在一项活动中使用了4个字段和2个微调器.这些组件的顺序是2 EditText,然后是2个微调器,然后是2个EditText字段.

当我将焦点(在软键盘下一个按钮的帮助下)EditText转移到微调器时,旋转器没有获得焦点,焦点转移到EditText放置在微调器后面的下一个场时,会出现问题.

我在微调器上使用了requestfocus(),但它没有用.

如何确保微调器获得焦点?

Rap*_*ira 40

我设法找到一个解决方案,然后重新定位我的微调器.在微调器之前的EditText中,添加此侦听器:

editTextBefore.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_NEXT) {
            hideKeyboard();
            textView.clearFocus();
            spinner.requestFocus();
            spinner.performClick();
        }
        return true;
    }
});
Run Code Online (Sandbox Code Playgroud)

您还需要将这些行添加到有效的微调器以获得焦点:

spinner.setFocusable(true); // can be done in XML preferrable
Run Code Online (Sandbox Code Playgroud)

我的hideKeyboard函数只是我想要添加的视觉细节,因此键盘被隐藏:

private void hideKeyboard() {
    InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
            InputMethodManager.HIDE_NOT_ALWAYS);
}
Run Code Online (Sandbox Code Playgroud)

希望我能帮助解决这个棘手的问题.
该标志InputMethodManager.HIDE_NOT_ALWAYS可以在文档中找到.


Sha*_*een 19

谢谢,我已经解决了以下问题:

  1. 我将Spinner对象设置在顶部(在onCreate方法内),以确保我的代码首先被执行
  2. 我使用了以下内容:

    Spinner s1 = (Spinner) findViewById(R.id.spinner1); 
    s1.setFocusable(true); 
    s1.setFocusableInTouchMode(true);
    s1.requestFocus();
    
    Run Code Online (Sandbox Code Playgroud)

  • 你清楚地从@shanet得到了解决方案,所以你应该选择他们的答案. (3认同)

sha*_*net 6

这是一个黑暗中的镜头,但尝试将可聚焦属性(在XML或代码中;无论你采用什么方式)设置为在微调器上为true.

http://developer.android.com/reference/android/view/View.html#attr_android:focusable

编辑:另外,看到这个问题:无法管理requestFocus一个微调器