是否支持一个Compent从一个父容器组件中移除然后加载到另一个父容器组件?

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

HarmonyOS
2024-11-13 11:53:00
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

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

A页面:​

@Entry 
@Component 
struct Index { 
  @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.ArkUI'; 
 
@Entry 
@Component 
struct Index2 { 
  @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']; 
  } 
}
分享
微博
QQ
微信
回复
2024-11-13 19:10:11
相关问题
entry如何拉起另一个Module的Ability
4138浏览 • 1回复 待解决
HarmonyOS如何获取一个类的类名称
633浏览 • 3回复 待解决
HAR能读到另一个HAR里的rawfile文件吗
1778浏览 • 1回复 待解决
如何实现一个折叠组件
960浏览 • 1回复 待解决