HarmonyOS鸿蒙Next中页面跳转(Slice跳转)引起的按钮点击不了的问题,以及自己的感悟

HarmonyOS鸿蒙Next中页面跳转(Slice跳转)引起的按钮点击不了的问题,以及自己的感悟 前情:已经粗略的看完鸿蒙OS开发文档,但是有很多地方还不懂,今天翻过头来重新看一下重新跟着操作一下,然后发现的问题。

该问题前段时间有人发现过,这次操作正好碰到,翻阅了一下其他人的解决办法,正好解决。

先把别人的那个抛出问题的论坛链接给发一下: https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202358371331020893&fid=0101303901040230869

正式开场:

在开发文档中介绍: AbilitySlice间导航

在练习这块的时候根据官网文档操作发现在AbilitySlice跳转后,使用返回按钮返回前一个Slice,重新跳转目标Slice的时候发现根本跳转不过来。

正好在前端时候逛论坛的时候碰到这个问题,搜索了一下正好有小伙伴在回复中有解决办法,自己测试果然有效。问题是在官方文档中,在前一个Slice中初始化按钮的点击事件是写在了onStart中,这样就会导致上述我倾述的问题,如果把初始化按钮点击事件写在了onActive中就可以重复出发事件。最后我分析,这个可能是和Slice的生命周期有关系,因为Slice加载的时候onStart的操作只触发一次,所以从栈中重新浮出来的时候onStart不再执行,只是该slice从BACKGROUND状态编导Active状态的时候触发了onActive的操作,所以又重新初始了一下按钮的点击事件这样才是按钮点击重新生效的。这个只是我自己的一个猜想,希望能得到官方的肯定。


更多关于HarmonyOS鸿蒙Next中页面跳转(Slice跳转)引起的按钮点击不了的问题,以及自己的感悟的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

用最新的IDE版本试一下

更多关于HarmonyOS鸿蒙Next中页面跳转(Slice跳转)引起的按钮点击不了的问题,以及自己的感悟的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我这个帖子官方已经回复的了,和你想的一样,这算是文档 bug,应该写在onActive里面

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202359095080920910&fid=0101303901040230869

开发者您好,在使用present进行页面跳转的时候,Slice的实例确实会终止,导致不走onStart,只走OnActive,具体可以参考我们的开发者文档AbilitySlice间导航。

这应该是个 bug 吧。因为同样是在 `onStart` 中绑定,如果这样写就没问题

```java
[@Override](/user/Override)
public void onStart(Intent intent) {
    super.onStart(intent);
    // 自行解析 xml,然后使用 view.find 方法并绑定点击回调
    Component rootView = LayoutScatter.getInstance(getContext()).parse(ResourceTable.Layout_main_layout, null, false);
    super.setUIContent((ComponentContainer) rootView);
    rootView.findComponentById(ResourceTable.Id_btnTest).setClickedListener(clickedListener);
}

但是直接使用 AbilitySlice.findComponentByIdonBackPress 之后就无法再次触发点击回调

[@Override](/user/Override)
protected void onStart(Intent intent) {
    super.onStart(intent);
    setUIContent(ResourceTable.Layout_test_subject_layout);
    // 直接使用 find 方法绑定,则返回后点击无法触发回调
    findComponentById(ResourceTable.Id_btnTest).setClickedListener(clickedListener);
}

期待HarmonyOS能在未来推出更多针对企业用户的解决方案。

亲爱滴开发者 ,这个问题已经在处理中啦,稍后答复你哟 ,么么哒

在HarmonyOS鸿蒙Next中,页面跳转(Slice跳转)可能导致按钮点击失效的问题,通常与生命周期管理或事件传递机制有关。当页面跳转时,原页面的Slice可能被销毁或暂停,导致事件无法正常传递到按钮。此外,如果跳转过程中未正确处理UI组件的状态,也可能导致按钮无法响应点击事件。

具体原因可能包括:

  1. 生命周期未正确处理:在Slice跳转时,原Slice的生命周期方法(如onStartonStop)未正确执行,导致按钮的事件监听器未正确注册或注销。
  2. UI状态未同步:跳转后,新Slice的UI状态未及时更新,导致按钮的点击事件无法触发。
  3. 事件传递中断:在跳转过程中,事件传递链可能被中断,导致按钮无法接收到点击事件。

解决此类问题,需确保在Slice跳转时,正确管理生命周期和UI状态,并确保事件传递链的完整性。

在HarmonyOS鸿蒙Next中,页面跳转(Slice跳转)可能导致按钮点击失效,通常是由于页面生命周期管理不当或事件绑定问题。建议检查以下几点:

  1. 确保页面跳转后,按钮的事件监听器正确绑定;

  2. 检查页面生命周期,避免在页面销毁后仍尝试操作UI;

  3. 使用AbilitySliceonActiveonInactive方法管理资源。

感悟:在开发中,理解并合理管理页面生命周期是确保应用稳定性的关键,避免因资源未释放或事件未绑定导致的异常。

回到顶部