[英]How can I write a extension function to instantiate a AndroidViewModel in Kotlin?
[英]How can I write Extension Functions in Kotlin?
我只想将我的普通 function 转换为 Kotlin 中的扩展 function。
这是我的 function,
fun hideKeyboard(activity: Activity) {
if (activity != null) {
activity.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_SATE_HIDDEN)
val view: View = activity.currentFocus
if (true) run {
val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}
}
您甚至可以使用 IDE 提供的自动重构来做到这一点:将光标放在要转换为接收器的参数上,按Alt + Enter并选择Convert parameter to receiver 。
结果是:
fun Activity.hideKeyboard() {
if (this != null) { // Note: this check is redundant, since the type is not-null
window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_SATE_HIDDEN)
val view: View = currentFocus
if (true) run {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}
}
如何创建扩展函数(对象类):
object ViewExtension{
fun CustomSpinner.validate(): Boolean {
if(!this.isSelected){
this.setHintTextColor(ContextCompat.getColor(this.context,android.R.color.holo_red_light))
this.setSpinnerHint(this.context.getString(R.string.please_select))
return false
}
return true
}
fun TextInputLayout.validate(): Boolean{
if(TextUtils.isEmpty(editText?.text)){
this.error = this.context.getString(R.string.required)
return false
}
return true
}
}
扩展功能的使用方法
fun validateFields(): Boolean{
var allfieldsSelected = true
textViewDetails.validate().apply {
if(!this)
allfieldsSelected = false
}
priority_spinner.validate().apply {
if(!this)
allfieldsSelected = false
}
}
另一个重要的部分是我们在使用之前导入了验证方法:
import com.example.activities.ViewExtension.validate
举个例子:
如何使用 kotlin 扩展名在 textview 中删除文本?
Kotlin 扩展
fun TextView.strikeTextView() {this.paintFlags = this.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG }
呼叫分机
binding.tvText.strikeTextView()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.