Android 初始化接口数组时转换为lambda
我想将过滤器设置为编辑文本视图Android 初始化接口数组时转换为lambda,android,lambda,kotlin,Android,Lambda,Kotlin,我想将过滤器设置为编辑文本视图 view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(object : InputFilter { override fun filter(source: CharSequence?, start: Int, end: Int,
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 "";
}
})
例如,我知道如何使用lambda表达式来设置单击侦听器,但如何提供一个元素数组,并用lambda表达式实现接口?单方法对象实际上不需要显式声明方法的名称,因为只有一个。通常,如果您有一个带有单个方法的接口,则可以转换,即:
object : SomeInterface {
override fun someMethod(){
TODO("Something");
}
}
更简单的是:
SomeInterface {
TODO("Something");
}
如果存在参数,请添加如下参数:
SomeInterface { x, y, z ->
}
但是,由于存在漏洞,这对于Kotlin中定义的接口是不可能的。如果您对Kotlin中的接口尝试此操作,它将无法编译
您的接口是用Java定义的,这意味着您可以:
view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(InputFilter { source, start, end, dest, dstart, dend ->
// TODO: Do something
"";
})
view.findViewById(R.id.some_edit_text)。filters=arrayOf(InputFilter{source,start,end,dest,dstart,dend->
//托多:做点什么
"";
})
此外,每当您在IntelliJ或Android Studio中获得任何类型的建议时,Alt+Enter和默认键绑定都会显示解决方案的建议
单击enter将自动转换它,如果单击向右箭头,您将获得更多选项(包括修复文件中的所有相关问题,抑制文件)。这也适用于错误(尽管并非所有错误都有自动修复)、警告和其他建议
view.findViewById(R.id.some_edit_text)。filters=arrayOf(InputFilter{source,start,end,dest,dstart,dend->{//TODO:Do something”“}})
这就是你要找的吗?你可以按Alt+Enter让Android Studio为你自动转换大多数lambda,仅供参考
view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(InputFilter { source, start, end, dest, dstart, dend ->
// TODO: Do something
"";
})