Я работаю над телевизионным приложением со многими Lazyrows контента. Большинство из них статичны, но некоторые из них могут быть изменены в зависимости от действий пользователя. Например, a Heplocal Watch Row с Card s, которая приводит к контенту, который в настоящее время смотрит пользователь. К сожалению, поскольку пользователь может нажать на карту , выходить на себя, закончить контент, а затем вернуться на страницу, по умолчанию, который FocusRestorer может не существовать, когда страница перекачивается. Это вызывает аварию. < /P>
Код: Выделить всё
FocusRequester is not initialized. Here are some possible fixes:
1. Remember the FocusRequester: val focusRequester = remember { FocusRequester() }
2. Did you forget to add a Modifier.focusRequester() ?
3. Are you attempting to request focus during composition? Focus requests should be made in
response to some event. Eg Modifier.clickable { focusRequester.requestFocus() }
Я смог предотвратить сбои и перефокусировку при возвращении на страницу, взяв FocusRestorer и вместо этого запомнив индекс и идентификатор контента последнего целевого элемента. Затем я использую их для запросафокуса при позиционировании, вроде этого:
Код: Выделить всё
KeepWatchingCard(content = content, cardModifier = Modifier
.focusRequester(requester)
.onGloballyPositioned {
if (shouldRequestFocus) { // checks if this was the last focused row and item
requester.requestFocus()
onFocus() // sets a variable elsewhere so we don't requestFocus multiple times
}
}, onClick = {
lastContentId.intValue = it.id
lastIndex.intValue = index
onClick(it) // navigates to content
})
Это не идеально, хотя, поскольку у меня нет функциональности от фокусировки , как по умолчанию или возвращение к моему месту после прокрутки дальше по странице. Предоставление каждой карте своему собственному фокусировке requester и сохранению ее для использования просто вызывает сбои при удалении или еще не заметно.>
Подробнее здесь:
https://stackoverflow.com/questions/795 ... h-changing