Я хочу установить фильтр для редактирования текста.

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.

Я знаю, как использовать лямбда-выражения, например, для установки прослушивателей кликов, но как мне предоставить единый массив элементов с реализацией интерфейса с помощью лямбда-выражения?

3
Jason Saruulo 5 Окт 2018 в 21:46

1 ответ

Лучший ответ

Объекты с одним методом фактически не нуждаются в явном объявлении имен методов, потому что существует только один. Как правило, если у вас есть интерфейс с одним методом, вы можете преобразовать, то есть это:

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
    "";
})

Кроме того, всякий раз, когда вы получаете какие-либо предложения в IntelliJ или Android Studio, Alt + Enter с привязками клавиш по умолчанию показывает вам предложения решений.

enter image description here

Нажатие на ввод автоматически преобразует его, а если вы нажмете стрелку вправо, вы получите больше возможностей (включая исправление всех связанных проблем в файле, подавление его). Это также относится к ошибкам (хотя не все они исправляются автоматически), предупреждениям и другим предложениям.

6
Zoe 6 Окт 2018 в 15:10