HarmonyOS fraction跳转Ability/AbilitySlice问题

fraction是鸿蒙里面一个类似Android的fragment的一个组件,具体如何使用可参考这篇文章https://blog.csdn.net/xq610928/article/details/114435014

Android中fragment是可以跳到Activity,鸿蒙的fraction也有类似的效果跳到Ability,实际上是跳到Page Ability的主AbilitySlice。鸿蒙的Ability分为三大类Page Ability、Service Ability、Data Ability,Page Ability是FA唯一支持的模板,用于提供与用户交互的能力,由一个或多个AbilitySlice组成。所以Fraction跳到Ability,实际上是跳到Ability默认的主路由上(AbilitySlice)。

下面介绍跳转到不同Page Ability(默认路由) 和相同Page Ability 的其他路由(AbilitySlice) 的方法:

一、跳转到不同的Page Ability:

创建一个Page Ability 

Operation operation =
    new Intent.OperationBuilder()
            .withBundleName("包名")
            .withAbilityName("类名")
            .build();
intent.setOperation(operation);

以上代码即可从Fraction跳至不同Page Ability,打开的界面则是该Page Ability的默认路由的界面

若需跳到不同的Page Ability的副路由(AbilitySlice),则只需加入.withAction("action.detail")即可,action.detail为confi.json配置文件中所配置Action名称,具体步骤参看下面的操作。注意:Page Ability需要对应好,下面步骤1的name应该是需要跳转的Page Ability。

二、跳至与Fraction在同一个Page Ability中的AbilitySlice

跳转步骤如下:

1. 在config.json配置文件中配置

 在actions中添加"action.detail" ,name为fraction所在的Page Ability

2. 在Ability(步骤1中name指向的Ability)的onStart方法中配置副路由,指向所需AbilitySlice

addActionRoute("action.detail", NewsdetailAbilitySlice.class.getName());

action.detail 为步骤1所配置的action名称,NewsdetailAbilitySlice.class.getName()则是需要跳转的AbilitySlice

3. 调用

Intent intent = new Intent();
Operation operation =
    new Intent.OperationBuilder()
        .withBundleName(getBundleName())
        .withAbilityName(MainAbility.class.getName())
        .withAction("action.detail")
        .build();
intent.setOperation(operation);

.withAbilityName(MainAbility.class.getName())为所在的Page Ability

.withAction("action.detail")为步骤1配置的action名称

这样就可以实现fraction跳转AbilitySlice

补充:AbilitySlice如何关闭(finish)

直接调用terminate()方法,即可关闭AbilitySlice
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1. 编程:建立一个分数类。分数类的数据成员包括分子和分母,成员函数包括显示、输入、约分、通分、比较、加、减、乘、除、求相反数。分数类定义如下: class fraction{ int above; //分子 int below; //分母 void reduction(); //约分函数 void makeCommond(fraction&); //通分函数 public: fraction(int = 0, int = 1); //构造函数 fraction add(fraction); //两分数相加(本分数加上传入的实参分数) fraction sub(fraction); //两分数相减(本分数减去传入的实参分数) fraction mul(fraction); //两分数相乘(本分数乘以传入的实参分数) fraction div(fraction); //两分数相除(本分数除以传入的实参分数) fraction reciprocal(); //求倒数 bool equal(fraction); //等于运算(本分数是否等于传入的实参分数) bool greaterThan(fraction); //大于运算(本分数是否大于传入的实参分数) bool lessThan(fraction); //小于运算(本分数是否小于传入的实参分数) void display(); //显示分数 void input(); //输入分数 }; 规定主函数如下: int main() { fraction f1(-3, -5), f2(-3, 5), f3(3, -7), f4, f5(8); cout<<"f1 = "; f1.display(); cout<<"f2 = "; f2.display(); cout<<"f3 = "; f3.display(); cout<<"f4 = "; f4.display(); cout<<"f5 = "; f5.display(); if (f1.greaterThan(f2)) cout<<"f1 > f2"<<endl; if (f2.lessThan(f3)) cout<<"f2 < f3"<<endl; if (f1.equal(f1)) cout<<"f1 == f1"<<endl; f4 = f1.add(f3); cout<<"f4 = f1+f3 = "; f4.display(); f4 = f1.sub(f2); cout<<"f4 = f1-f2 = "; f4.display(); f4 = f1.mul(f3); cout<<"f4 = f1*f3 = "; f4.display(); f4 = f2.div(f3); cout<<"f4 = f2/f3 = "; f4.display(); f4 = f2.reciprocal(); cout<<"f4 = 1/f2 = "; f4.display(); f4.input(); cout<<"f4 = "; f4.display(); return 0; } 要求: (1)完成所有成员函数,并用上述主函数验证是否达到设计要求,理解为何将约分函数reduction()和通分函数makeCommond(fraction)设计为分数类的私有成员函数而非公有成员; (2)自行编写约分函数reduction()和通分函数makeCommond(fraction),可自己设计,也可参考其它资料。
06-08
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值