HarmonyOS 鸿蒙Next slice页面来回跳转后,TextField里的内容会消失

HarmonyOS 鸿蒙Next slice页面来回跳转后,TextField里的内容会消失 有两个sliceA,sliceB。 B里面包含TabList的两个标签labelA与labelB。两个标签分别加载各自的UI。

当从sliceA通个present(new sliceB(),new Intent())跳转到sliceB后。在labelA里面TextField输入内容后,任意切换labelA与labelB两个标签,labelA里TextField输入的内容任然保留。然而再跳转到sliceA,接着再跳转到sliceB。此时的labelA中TextField里的内容保持不变,但是点击切换到labelB后,再点击切换回abelA,labelA里所有TextField的内容会全部清空。这是怎么回事。

目前找不到问题所在,请大佬们帮忙指点一下!


更多关于HarmonyOS 鸿蒙Next slice页面来回跳转后,TextField里的内容会消失的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

ide版本升级下呢,先试试api9

更多关于HarmonyOS 鸿蒙Next slice页面来回跳转后,TextField里的内容会消失的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


DevEco Studio 3.1.1 Release
构建版本:3.1.0.501, built on June 20, 2023
Build #DS-223.8617.56.36.310501
Runtime version: 17.0.6+10-b829.5 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1536M
Cores: 4
Registry:
external.system.auto.import.disabled=true
我也是开的api9的模拟器,就是不行。

补充,用的javaUI api7

在HarmonyOS鸿蒙Next中,slice页面来回跳转后,TextField里的内容消失,通常是由于页面生命周期管理或状态未正确保存导致的。鸿蒙Next的slice页面在跳转时可能会被销毁或重建,如果TextField的内容未通过AbilitySliceonSaveInstanceState方法保存,或未在onRestoreInstanceState方法中恢复,页面重建时内容会丢失。

解决方法如下:

  1. 使用onSaveInstanceState保存TextField的内容:

    onSaveInstanceState(outState: PacMap): void {
        super.onSaveInstanceState(outState);
        outState.putString("textFieldContent", this.textField.getText());
    }
    
  2. 使用onRestoreInstanceState恢复TextField的内容:

    onRestoreInstanceState(savedInstanceState: PacMap): void {
        super.onRestoreInstanceState(savedInstanceState);
        const savedText = savedInstanceState.getString("textFieldContent");
        if (savedText) {
            this.textField.setText(savedText);
        }
    }
    
  3. 使用AbilitySliceonStart方法检查并恢复状态:

    onStart(intent: Want): void {
        super.onStart(intent);
        if (intent?.params?.hasKey("textFieldContent")) {
            this.textField.setText(intent.params.getString("textFieldContent"));
        }
    }
    

通过这些方法,可以确保TextField的内容在页面跳转后不会丢失。

在HarmonyOS(鸿蒙Next)中,页面跳转后TextField内容消失,通常是由于页面生命周期导致的状态丢失。每次跳转后页面会被销毁重建,默认情况下TextField的内容不会自动保留。解决方法如下:

  1. 使用状态管理:通过@State@Observed装饰器保存TextField的内容,确保在页面重建时恢复数据。
  2. 页面缓存:使用@StorageLinkLocalStorage将数据持久化,即使页面销毁也能恢复。
  3. 避免页面重建:通过路由配置preserveState选项,防止页面频繁销毁重建。

示例代码片段:

@State private inputText: string = '';

TextField({ text: this.inputText })
  .onChange((value) => {
    this.inputText = value;
  });

通过以上方法可以有效解决TextField内容丢失的问题。

回到顶部