Litho FocusChangedEvent запускается постоянно
Я пытаюсь написать демо-версию Android TV, добавьте FocusChangedEvent в ListItemSpec, чтобы изменить состояние элемента. Демо очень просто, просто меняя ClickEvent с barebones (демо). И обнаружил, что элемент в состоянии RecyclerCollectionComponent hasFocus постоянно менялся. Я считаю, что первый элемент в списке теряет фокус и возвращает его обратно. и пульт дистанционного управления телевизора трудно скользить список. Я проверил вхождение ключевого события dispatchKeyEvent, но ничего.
@OnCreateLayout
fun onCreateLayout(
c: ComponentContext,
@Prop color: Int,
@Prop title: String,
@Prop subtitle: String,
@State isFocus: Boolean
): Component = Column.create(c)
.paddingDip(ALL, 16f)
.focusable(true)
.clickHandler(ListItem.onFocusChanged(c))
.backgroundColor(if (isFocus) Color.GRAY else Color.WHITE)
.child(
Text.create(c)
.text(title)
.textSizeSp(40f))
.child(
Text.create(c)
.text(subtitle)
.textSizeSp(20f))
.build()
@OnUpdateState
fun bgColorChange(isFocus: StateValue<Boolean>) {
isFocus.set(!isFocus.get()!!)
}
@OnEvent(FocusChangedEvent::class)
fun onFocusChanged(c: ComponentContext, @FromEvent hasFocus:Boolean) {
logd("onFocusChanged","$hasFocus")
ListItem.bgColorChange(c)
}
2019-06-24 11:35:41.626 19560-19560/com.demo.lithodemo D/onFocusChanged: true
2019-06-24 11:35:41.659 19560-19560/com.demo.lithodemo D/onFocusChanged: true
2019-06-24 11:35:41.662 19560-19560/com.demo.lithodemo D/onFocusChanged: false
2019-06-24 11:35:41.664 19560-19560/com.demo.lithodemo D/onFocusChanged: true
2019-06-24 11:35:41.697 19560-19560/com.demo.lithodemo D/onFocusChanged: true
2019-06-24 11:35:41.700 19560-19560/com.demo.lithodemo D/onFocusChanged: false
2019-06-24 11:35:41.705 19560-19560/com.demo.lithodemo D/onFocusChanged: true
2019-06-24 11:35:41.742 19560-19560/com.demo.lithodemo D/onFocusChanged: true
2019-06-24 11:35:41.744 19560-19560/com.demo.lithodemo D/onFocusChanged: false