Как обрабатывать нажатой ввод с Litho.Edittext
В моем текущем проекте Android я должен использовать Litho Framework. Проблема, с которой я столкнулся сейчас, заключается в том, как обрабатывать клавишу ввода с помощью виджета Litho EditText.(Вызывать запрос при нажатии клавиши ввода на программной клавиатуре). Я попытался установить setOnKeyListener на LithoView, который содержит EditText, но без какого-либо эффекта. Так что, если кто-то использует Litho с EditText и может помочь, я буду счастлив.
1 ответ
Это вызывает событие щелчка, к сожалению, это также происходит для регулярных щелчков.
import android.graphics.Color
import android.text.InputType
import android.util.Log
import com.facebook.litho.*
import com.facebook.litho.annotations.*
import com.facebook.litho.widget.EditText
import com.facebook.litho.widget.Recycler
import com.facebook.litho.widget.RecyclerBinder
import com.facebook.litho.widget.TextChangedEvent
import com.facebook.yoga.YogaEdge
interface OnExecuteListener {
fun onExecute(query: String)
}
@LayoutSpec
class MainComponentSpec {
companion object {
@JvmStatic
@OnCreateInitialState
fun createInitialState(c: ComponentContext, url: StateValue<String>, @Prop initialUrl: String) {
url.set(initialUrl)
}
@JvmStatic
@OnCreateLayout
fun onCreateLayout(
c: ComponentContext, @State url: String, @Prop recyclerBinder: RecyclerBinder): ComponentLayout {
return Column.create(c)
.paddingDip(YogaEdge.ALL, 16f)
.backgroundColor(Color.WHITE)
.child(urlText(c, url))
.child(getRecyclerComponent(c, recyclerBinder))
.build()
}
@JvmStatic
@OnEvent(TextChangedEvent::class)
fun onTextChanged(c: ComponentContext, @State url: String) {
Log.i("X", "tc: " + url)
}
@JvmStatic
@OnEvent(ClickEvent::class)
fun onClick(c: ComponentContext, @State url: String, @Prop executeListener: OnExecuteListener) {
executeListener.onExecute(url)
}
private fun urlText(c: ComponentContext, url: String): EditText.Builder? {
return EditText.create(c)
.text(url)
.textSizeSp(14f)
.isSingleLine(true)
.inputType(InputType.TYPE_TEXT_VARIATION_URI)
.clickHandler(MainComponent.onClick(c))
.textChangedEventHandler(MainComponent.onTextChanged(c))
}
private fun getRecyclerComponent(c: ComponentContext,
recyclerBinder: RecyclerBinder): Component<Recycler> {
return Recycler.create(c).binder(recyclerBinder).build()
}
}
}