5. 任务四:编写Page之间的导航 在"entry > src > main > java> 包名 "中"MainAbility.java"文件中,我们可以看到在onStart()中已经通过路由导航到MainAbilitySlice页面。
- public class MainAbility extends Ability {
- @Override
- public void onStart(Intent intent) {
- super.onStart(intent);
- super.setMainRoute(MainAbilitySlice.class.getName());
- }
- }
同理"SecondAbility.java"也已经导航到"SecondAbilitySlice.java"页面,接下来我们来完成两个Page Ability之间的导航。
打开 "entry > src > main > java> 包名 >slice"中的"MainAbilitySlice.java"文件,我们进一步完成Page间导航按钮的响应逻辑,实现对应的方法startEnterSecondAbility()。
Page间的导航可以使用startAbility()或startAbilityForResult()方法,获得返回结果的回调为onAbilityResult()。为了获取返回值,我们这里使用startAbilityForResult()方法跳转到SecondAbility。
示例代码如下:
- /**
- * Explicit Startup
- */
- private void startEnterSecondAbility() {
- Intent intent = new Intent();
- Operation operation = new Intent.OperationBuilder().withDeviceId("")
- .withBundleName(getBundleName())
- .withAbilityName("com.huawei.abilityintent.SecondAbility")
- .build();
- intent.setOperation(operation);
- intent.setParam("key", "我从MainAbility进到了SecondAbility");
- startAbilityForResult(intent, 1);
- }
在同目录下的"SecondAbilitySlice.java"文件中,我们对从MainAbility中获取到的信息通过Text控件进行展示,并且通过按钮点击事件完成terminnate()操作。
- @Override
- public void onStart(Intent intent) {
- super.onStart(intent);
- super.setUIContent(ResourceTable.Layout_ability_second);
-
- Component secondBackFirstButton = findComponentById(ResourceTable.Id_second_back_first);
- secondBackFirstButton.setClickedListener(component -> terminate());
-
- Text showParametersText = (Text) findComponentById(ResourceTable.Id_second_text);
- showParametersText.setText(intent.getStringParam("key"));
- }
同时,我们在SecondAbility页面中设置返回MainAbility需要的数据。在"SecondAbility.java"中,我们调用setResult()设置返回结果:
- @Override
- protected void onActive() {
- super.onActive();
- Intent intent = new Intent();
- intent.setParam("key", "我从SecondAbility跳回来啦");
- setResult(0, intent);
- }
说明
如果是在AbilitySlice中,我们也可以通过下面方式完成setResult()设置返回结果哟~
getAbility().setResult(0, intent);
最后,在"MainAbilitySlice.java"中增加下面代码,完成返回结果的回调函数onAbilityResult(),将返回结果显示在页面上:
- @Override
- protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
- if (resultCode != 0 || resultData == null) {
- return;
- }
- String result = resultData.getStringParam("key");
- backValueText.setText(result);
- }