Ich habe also ein Android-TV-Projekt und meine Struktur ist so
Code: Select all
TvLazyColumn(
state = listState,
pivotOffsets = PivotOffsets(0.15F),
modifier = Modifier
.focusRequester(setFocusContinueWatch)
.onKeyEvent {
if (it.nativeKeyEvent.action == KeyEvent.ACTION_DOWN) {
when (it.nativeKeyEvent.keyCode) {
KeyEvent.KEYCODE_DPAD_UP -> {
if (selectedRow > 0) {
selectedRow--
isUpFromList = false
} else {
isUpFromList = true
setFocusContinueWatch.freeFocus()
isFocusOnListing = false
}
}
KeyEvent.KEYCODE_DPAD_DOWN -> {
if (selectedRow < sizeOfRows!!) {
selectedRow++
isFocusOnListing = true
isUpFromList = false
}
}
}
}
false
}
Jetzt darüber habe ich zwei Arten der Ansicht, eine bei Focusonlisting und eine bei !focusonlisting. Im Falle von !focusonlisting habe ich also eine Schaltfläche „Jetzt ansehen“. Ich habe also eine Logik für die Indizierung, um die ausgewählte Zeile jetzt zu erhalten, wenn ich in der obersten Zeile nach oben drücke und andernfalls Logikauslöser blockiere
Code: Select all
LaunchedEffect(isFocusOnListing) {
if (isUpFromList) {
setFocusContinueWatch.freeFocus()
watchNowBtnFocus = true
setFocusOnWatchNow.captureFocus()
}
}
Was nun passiert, wenn ich von Index 0 der ersten Zeile nach oben drücke, ist, dass der Fokus auf der Schaltfläche liegt, da sich die Farbe der Schaltfläche bei Fokus ändert, aber auch der Fokus auf der Zeile bleibt, so wie sie angezeigt wird den Rand und wenn ich mich nach links und rechts bewege, bewege ich mich in der Reihe nach links und rechts. Jetzt muss ich noch einmal nach oben drücken, um tatsächlich zur Schaltfläche zu gelangen.