每当我在应用程序中创建表格(例如登录或注册表格)时,我总是发现一个问题,该问题是用户单击“提交”按钮时隐藏键盘。为了解决这个问题,我总是在Click侦听器的第一行中编写键盘隐藏代码,如果我的应用程序中只有1或2个表单,但是如果应用程序中有保存形式,则此解决方案就可以了应用实际业务逻辑上的某些开销。考虑到维护“键盘可见性” 的开销,我已经开发了一种通用的解决方案来处理此问题。我正在学习使用Kotlin开发Android应用程序,并使用Kotlin接口的“默认方法”开发了此代码。
我正在与您共享代码,我需要您的建议和 这种方法的改进。
我想知道我是否可以在现场项目中使用这种方法,或者 我只是不能使用这种方法,因为这是错误的。请给我 您宝贵的反馈意见。
MainActivity:
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity(), CustomOnClickListener {
override fun onClick(v: View?) {
super<CustomOnClickListener>.onClick(v)
when(v?.id){
R.id.button1 -> Toast.makeText(this, "button1 clicked", Toast.LENGTH_LONG).show()
R.id.button2 -> Toast.makeText(this, "button2 clicked", Toast.LENGTH_LONG).show()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button1.setOnClickListener(this)
button2.setOnClickListener(this)
}
}
CustomOnClickListener
import android.app.Activity
import android.content.Context
import android.view.View
import android.view.inputmethod.InputMethodManager
interface CustomOnClickListener : View.OnClickListener{
override fun onClick(v: View?) {
v?.hideKeyboard()
}
}
fun View.hideKeyboard() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
}