Я всегда находил одну проблему, когда я делаю формы (например, форму входа или регистрацию) в своих приложениях, эта проблема заключается в скрытии клавиатуры , когда пользователь нажимает кнопку отправки. Для решения этой проблемы я всегда пишу код, скрывающий клавиатуру, в самой 1-й строке прослушивателя щелчков. Это решение было бы хорошо, если в моем приложении только 1 или 2 формы, но если в приложении есть формы сохранения, тогда оно становится определенные накладные расходы на фактическую бизнес-логику приложения. Принимая это во внимание поддержание «видимости клавиатуры» , я разработал общее решение для решения этой проблемы. Я учусь разрабатывать приложение для Android, используя kotlin, и используя «методы по умолчанию» интерфейса 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)
}