小编Fir*_*ate的帖子

导航 popBackStack 的焦点恢复和使用状态修饰符的焦点恢复

JetStream tv 应用程序示例中,它有一个createInitialFocusRestorerModifiers()函数充当其子级 TvLazyRow/Column 的焦点恢复器。

正如该函数的 KDoc 中所述:

返回一组修饰符 [FocusRequesterModifiers],可用于恢复焦点并指定最初聚焦的项目。

其用法:

  LazyRow(modifier.then(modifiers.parentModifier) {
   item1(modifier.then(modifiers.childModifier) {...}
   item2 {...}
   item3 {...}
   ...
  }
Run Code Online (Sandbox Code Playgroud)

NestedLazyList 可组合项 正确的行为应该如下图所示。向下按 DPad 应聚焦到第一个项目,向上按应将焦点带到最后保存的状态焦点子项。

不过,这里的问题是它不能恢复对导航的关注[ popBackStack()],所以我尝试将上述功能与这个答案集成。

当前代码:

        // var anItemHasBeenFocused: Boolean = false
        // var lastFocusedItem: Pair<Int, Int> = ...

        TvLazyRow(
            modifier = focusRestorerModifiers.parentModifier,
            pivotOffsets = PivotOffsets(parentFraction = 0F)
        ) {
            itemsIndexed(items = items) { columnIndex, item ->
                val focusRequester = remember { FocusRequester() }
                
                RowItem(
                    modifier = Modifier
                        .focusRequester(focusRequester)
                        .ifElse(
                            condition = columnIndex …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose android-jetpack-compose-tv

4
推荐指数
1
解决办法
710
查看次数