要做输入法软键盘搜索其实是挺简单的,在xml布局文件里这样设置编辑框:

                          

android:focusable="true"
android:focusableInTouchMode="true"
这两个属性一定要在编辑框的父布局上,用于屏蔽EditText自动获取焦点问题,然后在EditText上加入
android:imeOptions="actionSearch"
android:singleLine="true"
即可改变软键盘的回车变成搜索按钮或者搜索汉字

但是,搜索的逻辑你可能会这样写:

 search_text_view1.setOnEditorActionListener { v, actionId, event ->            //修改回车键功能            if (actionId === EditorInfo.IME_ACTION_SEARCH || (event != null && event.keyCode == KeyEvent.KEYCODE_ENTER)) {                // 隐藏键盘                (getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)                        .hideSoftInputFromWindow(this@GoodsSelecotorActivity.currentFocus                                .windowToken, InputMethodManager.HIDE_NOT_ALWAYS)                keywords = search_text_view1.text.toString()                currentPage = 1                getRequestData(promotionId)            }            false        }

或者

 search_text_view1.setOnKeyListener { v, actionId, event ->            //修改回车键功能            if (actionId === EditorInfo.IME_ACTION_SEARCH || (event != null && event.keyCode == KeyEvent.KEYCODE_ENTER)) {                // 隐藏键盘                (getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)                        .hideSoftInputFromWindow(this@GoodsSelecotorActivity.currentFocus                                .windowToken, InputMethodManager.HIDE_NOT_ALWAYS)                keywords = search_text_view1.text.toString()                currentPage = 1                getRequestData(promotionId)            }            false        }

那么恭喜你,你已经掉坑了:搜索方法会执行两次

其实,当你调用setOnKeyListener的时候已经进坑了,这个方法是会执行两次的,就会导致你的网络请求执行两次,那么要么是加载弹窗一直显示,要么是数据重复了,正确的做法是放弃该方法,调用setOnEditorActionListener ,但是这个里面也要做一些修改才行,

 search_text_view1.setOnEditorActionListener { v, actionId, event ->            //修改回车键功能            if (actionId === EditorInfo.IME_ACTION_SEARCH) {                // 隐藏键盘                (getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)                        .hideSoftInputFromWindow(this@GoodsSelecotorActivity.currentFocus                                .windowToken, InputMethodManager.HIDE_NOT_ALWAYS)                keywords = search_text_view1.text.toString()                currentPage = 1                getRequestData(promotionId)            }            false        }

对,就是这样,if判断力精简了
if (actionId === EditorInfo.IME_ACTION_SEARCH) {
//正常逻辑
}
有的时候,加的判断多了,反而适得其反,Ok,就这样了。

更多相关文章

  1. Android(安卓)Framework中JNI调用
  2. Android(安卓)ApiDemos示例解析(15):App->Activity->SetWallpaper
  3. 【Flutter】修改图标、应用名称、包名等
  4. 软键盘显示及属性android:windowSoftInputMode使用总结 & [转一
  5. Android(安卓)隐藏/显示 Actionbar之后不能运行的问题
  6. 基于Android(安卓)studio3.6的JNI教程之helloworld思路详解
  7. Android(安卓)Eclipse插件TabHost问题(转载)
  8. Android知识点——更改软键盘回车键
  9. android:windowSoftInputMode属性使用

随机推荐

  1. php关闭报错
  2. 【docker+gdb】调试 PHP 源码,看 strval
  3. php读取数据库乱码
  4. apache开启伪静态
  5. php并发处理的几种方法
  6. apache伪静态转nginx
  7. php获取微信openid
  8. php关闭错误提示
  9. PHP获取不到SESSION信息之一般情况解决方
  10. php网站启用伪静态的方法