观心静

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

问题描述

  将EditText这个View成为了ListView或者RecyclerView的item时,在按输入法的回车/下一步/next时会出现的 focus search returned a view that wasn't able to take focus!的报错. 

 

问题原因

  因为在按下回车键后,焦点会自动切换到下一个EditText上.这个时候如果你隐藏或者本身未加载下一个EditText.就出现这个报错. 报错的意思就是我的焦点目标丢失了,找不到下一个EditText.

 

解决办法

第一种:

  在EditText属性里设置 android:imeOptions="actionUnspecified" . imeOptions就是控制回车键具体作用的属性

<EditText
        android:id="@+id/title_content"
        android:layout_width="0dp"
        android:layout_height="60dp"
        android:hint="请输入标题"
        android:singleLine="true"
        android:maxLength="20"
        android:inputType="text"
        android:imeOptions="actionUnspecified"
        app:layout_constraintTop_toBottomOf="@id/cover_barrier"
        app:layout_constraintLeft_toRightOf="@id/title"
        app:layout_constraintRight_toRightOf="parent"/>

  如果actionUnspecified属性设置后依然会报错,你可以尝试另外一个属性actionNone

第二种:

  这种办法就是监听编辑器操作,然后将回车操作写成自己需要的功能(将回车键或者其他键值取代成自己想要实现的逻辑).或者直接不写... 这种方式比较简单暴力

            mEditView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    return true;
                }
            });

注意需要返回 true 表示你已经处理过这个事件了.

 

posted on 2019-08-14 20:07  观心静  阅读(3173)  评论(0编辑  收藏  举报