我想为编辑文本视图设置过滤器。
view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(object : InputFilter {
override fun filter(source: CharSequence?,
start: Int,
end: Int,
dest: Spanned?,
dstart: Int,
dend: Int): CharSequence {
// TODO: Do something
return "";
}
})
无论如何,Android Studio会向我显示以下对象的警告/建议:InputFilter。
Convert to Lambda
This inspection reports an anonymous object literal implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression.
例如,我知道如何使用lambda表达式来设置点击侦听器,但是如何为单个元素数组提供带有lambda表达式的接口呢?
答案 0 :(得分:4)
单方法对象实际上不需要显式声明方法的名称,因为只有一个。通常,如果您的接口具有单一方法,则可以进行转换,即:
object : SomeInterface {
override fun someMethod(){
TODO("Something");
}
}
简单一点:
SomeInterface {
TODO("Something");
}
如果有参数,则添加以下内容:
SomeInterface { x, y, z ->
}
,但是由于bug,这对于Kotlin中定义的接口来说是不可能的。如果您在Kotlin中尝试使用此接口,它将无法编译。
您的接口是用Java定义的,这意味着您可以执行以下操作:
view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(InputFilter { source, start, end, dest, dstart, dend ->
// TODO: Do something
"";
})
此外,只要您在IntelliJ或Android Studio中获得任何建议,带有默认键绑定的 Alt + Enter 都会为您提供解决方案的建议。
单击Enter将自动进行转换,如果单击向右箭头,则会获得更多选项(包括修复文件中的所有相关问题,取消显示)。这也适用于错误(尽管并非所有人都可以自动修复),警告和其他建议。