You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android 如何从另一个页面获取文本赋值给Entry组件

Xamarin.Forms Android端跨页面传参首次加载失效解决方案

问题原因

该问题由Xamarin.Forms双端差异导致:

  1. Android端Preferences.Set底层默认使用Apply()异步持久化,存储完成前跳转第二页会读取到旧值
  2. Android端页面控件初始化渲染时机晚于OnAppearing首次触发,直接给Entry组件赋值会被后续的控件初始属性覆盖

解决方案

方案1:构造方法传参(最推荐,无时序问题)

直接通过页面构造方法传递参数,规避持久化存储的同步问题:

  1. 第一页跳转逻辑修改:
// 原有存储逻辑可保留
Preferences.Set("cityName", _cityEntry.Text);
// 跳转时直接传入参数
await Navigation.PushAsync(new AboutPage(_cityEntry.Text));
  1. 第二页代码调整:
public partial class AboutPage : ContentPage
{
    RestServiceForecast _restServiceForecast;
    string _cityName;

    // 新增带参数构造方法
    public AboutPage(string cityName)
    {
        InitializeComponent();
        NavigationPage.SetHasNavigationBar(this, false);
        _restServiceForecast = new RestServiceForecast();
        _cityName = cityName;
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        // 直接使用构造传入的参数,无需读取Preferences
        _cityEntry.Text = _cityName;
        _ = WeatherForecast();
    }
}

方案2:适配Android时序逻辑(必须使用Preferences传参时可选)

修改第二页OnAppearing逻辑,确保赋值在UI渲染完成、Preferences持久化完成后执行:

protected override async void OnAppearing()
{
    base.OnAppearing();
    // 短延迟等待Preferences持久化完成
    await Task.Delay(10);
    // 强制在UI主线程赋值,避免控件未初始化导致赋值失效
    Device.BeginInvokeOnMainThread(() =>
    {
        string cityName = Preferences.Get("cityName", "default_value");
        _cityEntry.Text = cityName;
    });
    _ = WeatherForecast();
}

方案3:强制Preferences同步写入

修改第一页存储逻辑,Android端强制同步提交,确保跳转前存储完成:

Preferences.Set("cityName", _cityEntry.Text);
// Android端强制同步持久化
#if ANDROID
var context = Android.App.Application.Context;
var sharedPrefs = context.GetSharedPreferences("Xamarin.Essentials.Preferences", Android.Content.FileCreationMode.Private);
sharedPrefs.Edit().Commit();
#endif
// 执行跳转逻辑
await Navigation.PushAsync(new AboutPage());

内容的提问来源于stack exchange,提问作者Ben Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 13:36:03