HarmonyOS 鸿蒙Next List里嵌套TextArea焦点问题
HarmonyOS 鸿蒙Next List里嵌套TextArea焦点问题
直接运行的时候 焦点是正常的,当list 里面 那几行放开注释再次运行的时候 会出现焦点失去的情况
import { LazyDataSource } from ‘widget/Index’
import { KeyboardAvoidMode, window } from ‘@kit.ArkUI’
@Component
export struct TodoPage {
@Prop title: string
@State contentList: LazyDataSource<number> = new LazyDataSource()
@State keyBoardHeight: number = 0
aboutToAppear(): void {
this.getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.OFFSET)
window.getLastWindow(getContext()).then((lastWindow) => {
lastWindow.on(“keyboardHeightChange”, (height) => {
this.keyBoardHeight = px2vp(height)
})
}).catch(() => {
})
this.contentList.pushData(1)
this.contentList.pushData(2)
this.contentList.pushData(3)
this.contentList.pushData(4)
this.contentList.pushData(5)
this.contentList.pushData(6)
this.contentList.pushData(7)
this.contentList.pushData(8)
this.contentList.pushData(9)
this.contentList.pushData(10)
this.contentList.pushData(11)
this.contentList.notifyDataReload()
}
build() {
NavDestination() {
Column() {
Text(‘标题’).height(100)
List() {
LazyForEach(this.contentList, (item: number, index) => {
ListItem() {
TextArea()
.height(100)
.width(‘100%’).margin(10)
}
}, (item: number, index) => {
return ${item}
})
//这段代码如果放开注释 焦点上下滑动的时候就会丢失
// ListItem() {
// Row().height(100)
// }
//
// ListItem() {
// Row().height(100)
// }
//
// ListItem() {
// Row().height(100)
// }
}
.scrollBar(BarState.Off)
.width(‘100%’)
.height(‘auto’)
.cachedCount(20)
.layoutWeight(1)
.contentEndOffset(20)
Row() {
Text(‘我是软键盘自定义区域’)
}
.backgroundColor(’#FFFF00’)
.width(‘100%’)
.height(200)
.visibility((this.keyBoardHeight > 0) ? Visibility.Visible : Visibility.None)
.margin({ bottom: this.keyBoardHeight })
}
.width(‘100%’)
.height(‘100%’)
.expandSafeArea([SafeAreaType.KEYBOARD])
}
.padding(44)
.hideTitleBar(true)
}
}
通过您的代码分析,当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。失焦的原因是因为组件被销毁导致状态丢失。如果LazyForEach不是必要的,可以将其替换为普通的forEach,这样可以避免状态丢失问题。
滑出可视区域后会先进缓存,如果cachedCount设置得比较大,导致组件出不了cache范围,就不会销毁,但是会重新加载,焦点状态不会保留。
针对HarmonyOS鸿蒙Next中List里嵌套TextArea的焦点问题,以下是一些可能的解决方案:
-
检查TextArea的焦点属性:
- 确保TextArea的
focusable
属性设置为true
,使其具备获焦能力。 - 若需要TextArea在特定条件下自动获焦,可设置
defaultFocus
为true
(但需注意,defaultFocus
只在页面初次创建且第一次进入时生效)。
- 确保TextArea的
-
使用焦点控制API:
- 在需要时,可通过
getFocusController().requestFocus(componentId)
方法主动将焦点转移到TextArea组件上。 - 若需清除当前焦点,可使用
clearFocus()
方法。
- 在需要时,可通过
-
监听焦点事件:
- 为TextArea组件添加
onFocus
和onBlur
事件监听器,以便在组件获焦或失焦时执行相应逻辑。
- 为TextArea组件添加
-
检查List组件的焦点管理:
- 确保List组件未对焦点转移进行限制或干扰。
- 若List组件内部有滚动条等交互元素,需确保它们不会干扰TextArea的焦点获取。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。