HarmonyOS 鸿蒙Next中present跳转返回后,点击事件不响应

HarmonyOS 鸿蒙Next中present跳转返回后,点击事件不响应 A AbilitySlice中有一个button设置了点击事件,点击后通过present跳转到新的B AbilitySlice,然后按返回键回到A AbilitySlice,再次点击button,没有事件响应。这是怎么回事,要怎么处理?难道每次返回后,都要重新setUIContent,设置button的点击事件?

11 回复

@Override public void onStart(Intent intent) { super.onStart(intent); KLog.d(“onStart”); ComponentContainer rootComponent =(ComponentContainer) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_main_layout, null, false); setUIContent(rootComponent); initView(); }

onStart方法里由原先的setUIContent(ResourceTable.Layout_main_layout);

改为

ComponentContainer rootComponent =(ComponentContainer) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_main_layout, null, false); setUIContent(rootComponent); 就没问题了,这是啥情况…

更多关于HarmonyOS 鸿蒙Next中present跳转返回后,点击事件不响应的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我也遇到这个问题,用present跳转。E/AGP: can not find focus

期待HarmonyOS能继续优化多屏协同功能,让跨设备体验更加完美。

我测的情况,返回后button对象都是null了,难道页面组件要全部重新初始化一次

有人遇到同样的问题吗?

或者贴下代码也是可以的,帮助快速定位哦~~~

代码如下,麻烦看下是什么问题,谢了 : )

MainAbilitySlice.java

package cn.kf156.testapp.slice;

import cn.kf156.testapp.ResourceTable;
import cn.kf156.testapp.SecondAbility;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.Button;
import ohos.agp.components.Component;

public class MainAbilitySlice extends AbilitySlice {

    private Button button;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        System.out.println("onStart");
        setUIContent(ResourceTable.Layout_main_layout);
        initView();
    }

    private void initView() {
        button = (Button) findComponentById(ResourceTable.Id_button);
        System.out.println("button " + (button != null));
        if (button != null) {
            // 为按钮设置点击回调
            button.setClickedListener(new Component.ClickedListener() {
                @Override
                public void onClick(Component component) {
                    System.out.println("button.onClick");
                    // startAbility();
                    present(new SecondAbilitySlice(), new Intent());
                }
            });
        }
    }

    private void startAbility() {
        Intent secondIntent = new Intent();
        // 指定待启动FA的bundleName和abilityName
        Operation operation = new Intent.OperationBuilder()
            .withDeviceId("")
            .withBundleName(getBundleName())
            .withAbilityName(SecondAbility.class.getName())
            .build();
        secondIntent.setOperation(operation);
        startAbility(secondIntent); // 通过AbilitySlice的startAbility接口实现启动另一个页面
    }

    @Override
    public void onActive() {
        super.onActive();
        System.out.println("onActive");
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
        System.out.println("onForeground");
    }
}

main_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<DependentLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:width="match_parent"
    ohos:height="match_parent"
    ohos:background_element="#000000">

    <Text
        ohos:id="$+id:text"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:center_in_parent="true"
        ohos:text="Hello World"
        ohos:text_color="white"
        ohos:text_size="32fp"/>

    <Button
        ohos:id="$+id:button"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:text_size="19fp"
        ohos:text="Next"
        ohos:top_padding="8vp"
        ohos:bottom_padding="8vp"
        ohos:left_padding="80vp"
        ohos:right_padding="80vp"
        ohos:text_color="white"
        ohos:background_element="$graphic:button_element"
        ohos:center_in_parent="true"
        ohos:bottom_margin="10vp"
        ohos:align_parent_bottom="true"/>
</DependentLayout>

SecondAbilitySlice.java

package cn.kf156.testapp.slice;

import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.colors.RgbColor;
import ohos.agp.components.DependentLayout;
import ohos.agp.components.Text;
import ohos.agp.components.element.ShapeElement;
import ohos.agp.utils.Color;

import static ohos.agp.components.ComponentContainer.LayoutConfig.MATCH_PARENT;
import static ohos.agp.components.ComponentContainer.LayoutConfig.MATCH_CONTENT;

public class SecondAbilitySlice extends AbilitySlice {

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        // 声明布局
        DependentLayout myLayout = new DependentLayout(this);
        // 设置布局大小
        myLayout.setWidth(MATCH_PARENT);
        myLayout.setHeight(MATCH_PARENT);
        ShapeElement element = new ShapeElement();
        element.setRgbColor(new RgbColor(0, 0, 0));
        myLayout.setBackground(element);

        // 创建一个文本
        Text text = new Text(this);
        text.setText("Nice to meet you.");
        text.setWidth(MATCH_PARENT);
        text.setTextSize(55);
        text.setTextColor(Color.WHITE);
        // 设置文本的布局
        DependentLayout.LayoutConfig textConfig = new DependentLayout.LayoutConfig(MATCH_CONTENT, MATCH_CONTENT);
        textConfig.addRule(DependentLayout.LayoutConfig.CENTER_IN_PARENT);
        text.setLayoutConfig(textConfig);
        myLayout.addComponent(text);

        super.setUIContent(myLayout);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

present的操作没有问题,咱们能不能上传日志呀,我们看看日志呢~~

问题正在帮您处理中,有解决方案立刻回您啊,请再等等呢。

在HarmonyOS鸿蒙Next中,present跳转返回后点击事件不响应的问题,通常与页面生命周期或事件绑定机制有关。可能的原因包括:

  1. 页面生命周期未正确处理:在present跳转返回后,页面可能未正确恢复或重新绑定事件。确保在onPageShowonPageActive生命周期回调中重新绑定事件。

  2. 事件绑定丢失:在页面跳转过程中,事件绑定可能被解除或未重新绑定。检查事件绑定代码,确保在页面返回后重新绑定。

  3. UI状态未更新:返回后,UI状态可能未及时更新,导致点击事件无法触发。确保在返回后更新UI状态。

  4. 异步操作未完成:如果存在异步操作,可能在返回时未完成,导致事件无法响应。确保异步操作完成后更新UI或重新绑定事件。

  5. 页面栈管理问题:present跳转可能影响页面栈管理,导致返回后页面状态异常。检查页面栈管理逻辑,确保页面状态正确恢复。

  6. 事件冒泡或捕获问题:检查事件是否被其他元素捕获或冒泡,导致点击事件未触发。确保事件绑定正确,避免事件被拦截。

  7. 系统或框架Bug:不排除系统或框架本身存在Bug,导致点击事件不响应。检查官方文档或社区,确认是否存在已知问题。

以上是可能导致点击事件不响应的原因,具体问题需结合代码和场景进一步分析。

在HarmonyOS鸿蒙Next中,present跳转返回后点击事件不响应,可能是由于页面生命周期或事件绑定问题导致的。建议检查以下几点:

  1. 生命周期回调:确保在onPageShowonPageResume中重新绑定事件处理函数,避免页面返回后事件未正确绑定。

  2. 事件绑定:确认点击事件是否在页面返回后仍然有效,必要时重新绑定事件。

  3. 页面状态:检查页面状态是否在返回后正确恢复,避免因状态丢失导致事件无法触发。

  4. 调试日志:添加日志输出,确认事件是否被触发,帮助定位问题。

通过以上步骤,通常可以解决点击事件不响应的问题。

回到顶部