AbilitySlice 间导航 3.2.3.1 同一 Page 内导航 当发起导航的 AbilitySlice 和导航目标的 AbilitySlice 处于同一个 Page 时,您可以通过 present()方法实现导航。如下代码片段展示通过点击按钮导航到其他 AbilitySlice 的方法: @Override protected void onStart(Intent intent) { … Button button = …; button.setClickedListener(listener -> present(new TargetSlice(), new Intent())); … } 如果开发者希望在用户从导航目标 AbilitySlice 返回时,能够获得其返回结果,则应当使 用 presentForResult()实现导航。用户从导航目标 AbilitySlice 返回时,系统将回调 onResult()来接收和处理返回结果,开发者需要重写该方法。返回结果由导航目标 AbilitySlice 在其生命周期内通过 setResult()进行设置。 @Override protected void onStart(Intent intent) { … Button button = …; button.setClickedListener(listener -> presentForResult(new TargetSlice(), new Intent(), 0)); … } @Override protected void onResult(int requestCode, Intent resultIntent) { if (requestCode == 0) { // Process resultIntent here. } } 系统为每个 Page 维护了一个 AbilitySlice 实例的栈,每个进入前台的 AbilitySlice 实例均 会入栈。当开发者在调用 present()或 presentForResult()时指定的 AbilitySlice 实例已经在栈 中存在时,则栈中位于此实例之上的 AbilitySlice 均会出栈并终止其生命周期。前面的示例代 码中,导航时指定的 AbilitySlice 实例均是新建的,即便重复执行此代码(此时作为导航目标 的这些实例是同一个类),也不会导致任何 AbilitySlice 出栈。