HarmonyOS 鸿蒙Next 是否支持一个Component从一个父容器组件中移除然后加载到另一个父容器组件

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 是否支持一个Component从一个父容器组件中移除然后加载到另一个父容器组件

例如在列表页的列表项上有个播放器组件,组件播放视频,当点击列表项,进入详情页,为了保持播放的连续性,能否将列表上的播放器组件加载到详情页的指定容器组件中。 类似Android中对view的add和remove操作,在ArkUI中支持吗,或者有什么方案能实现? 如上所述

3 回复

您的需要可以这么实现:在A页面跳转到B页面时,记录视频播放时间time,通过router的params传参数到B页面,再获取time,视频播放的时候,直接设置从time开始播放,相关代码如下:

A页面:
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
 [@State](/user/State) message: string = 'Hello World';
 public videoController:VideoController =new VideoController();
 private time:number = 0;
 build() {
   Row() {
     Column() {
       Text(this.message)
         .fontSize(50)
         .fontWeight(FontWeight.Bold)
       Video({src:videoPath),controller:this.videoController}).height(200).autoPlay(true).onUpdate((event)=>{
         this.time =event.time;
       })
       Button("跳转").onClick(()=>{
         router.pushUrl({url:"pages/index2",params:{time:this.time}})
       }).height(100).width(200)
     }
     .width('100%')
   }
   .height('100%')
 }
}
B页面:
import { router } from '[@kit](/user/kit).ArkUI';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index2 {
 [@State](/user/State) message: string = 'Hello World';
 public videoController:VideoController =new VideoController();
 private time?:number = 0;
 build() {
   Row() {
     Column() {
       Text(this.message)
         .fontSize(50)
         .fontWeight(FontWeight.Bold)
       if(this.time){
         Video({src:videoPath,controller:this.videoController}).height(200).autoPlay(true).onPrepared(()=>{
           this.videoController.setCurrentTime(this.time)
         });
       }
     }
     .width('100%')
   }
   .height('100%')
 }
 aboutToAppear(): void {
   let param = router.getParams() as Record<string,number>;
   this.time = param['time'];
 }
}

更多关于HarmonyOS 鸿蒙Next 是否支持一个Component从一个父容器组件中移除然后加载到另一个父容器组件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


没有 Add Remove.

NodeCotroller 这种预加载Node看看能满足不?

HarmonyOS 鸿蒙Next支持Component在不同父容器组件间的移除和加载,但并非通过直接的“拖拽”或“移动”组件的方式实现。实际上,这通常涉及到组件状态的保存与恢复、以及在不同页面或容器间的数据传递。

具体来说,当需要将一个Component从一个父容器移除并加载到另一个父容器时,可以:

  1. 在移除组件前,保存其当前的状态或数据。
  2. 通过页面跳转、事件传递或全局状态管理等方式,将数据传递到目标父容器所在的页面或组件。
  3. 在目标父容器中,根据传递过来的数据,重新创建或恢复该组件。

这种实现方式依赖于HarmonyOS提供的页面跳转、数据绑定和全局状态管理等能力。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部