我想简化我的代码。
当我使用SearchView触摸屏幕时,我实现了隐藏软键盘的方法。
我告诉你代码......
调用(在sv是SearchView实例的活动中)
hideKeyboard(this, sv)
有趣的扩展程序
fun Activity.hideKeyboard(context: Context, sv: SearchView) {
hideKeyboard(HideKeyboardWithSearchView(context, sv))
}
fun Activity.hideKeyboard(hideKeyboard: HideKeyboardWithSearchView) {
window.decorView.rootView.setOnTouchListener { _, _ ->
hideKeyboard.start()
return@setOnTouchListener false
}
}
执行操作的课程
import android.content.Context
import android.support.v7.widget.SearchView
import android.view.inputmethod.InputMethodManager
class HideKeyboardWithSearchView(private val context: Context, private val sv: SearchView) {
fun start() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(sv.windowToken, 0)
sv.clearFocus()
}
}
我想将两个有趣的扩展合并为一个。我认为这应该很容易用lambda或类似的,但我不能很好地控制这部分语言......: - (
有什么想法吗? : - )
解
fun Activity.hideKeyboard(sv: SearchView) {
window.decorView.rootView.setOnTouchListener { _, _ ->
HideKeyboardWithSearchView(this, sv).start()
return@setOnTouchListener false
}
}
答案 0 :(得分:2)
首先,您不需要将Context
传递到Activity
分机(除少数特殊情况外)。
其次,我真的不明白你想把它们合并成一个吗?除非你的意思是同时删除第二个扩展,否则你的第一个方法应该只包含第二个扩展的主体:
fun Activity.hideKeyboard(sv: SearchView) {
val hideKeyboardSV = HideKeyboardWithSearchView(this, sv)
window.decorView.rootView.setOnTouchListener { _, _ ->
hideKeyboard.start()
return@setOnTouchListener false
}
}
答案 1 :(得分:2)
你可以像这样使用第二个:
fun Activity.hideKeyboard(sv: View) {
window.decorView.rootView.setOnTouchListener { _, _ ->
HideKeyboardWithSearchView(this, sv).start()
return@setOnTouchListener false
}
}