【问题标题】:How to retrieve the message sent via MainActivity on the App.css page?如何在 App.css 页面上检索 MainActivity 发送的消息?
【发布时间】:2021-09-16 05:04:22
【问题描述】:

MainActivity.cs 我发送以下消息:

resultIntent.PutExtra("message", "string123");

然后在 App.css 我试图接受如下消息:

Intent.Extras.GetString("message", "");

但我使用的路径是 MainActivity.cs...

【问题讨论】:

  • 请不要将代码或错误作为图片发布
  • 如果要从MainActivity传递参数给App,在App构造函数中使用参数

标签: c# xamarin xamarin.forms xamarin.android


【解决方案1】:

您似乎想在首次创建 App 构造函数时将消息从 MainActivity 传递到 App。您可以通过多种方式实现这一目标

选项 1(推荐)

只需给App构造函数一个参数,如下

public App(string message)
{
  InitializeComponent();

  MainPage = new AppShell(message);
}

您可以在创建时从 MainActivity 设置如下

protected override void OnCreate(Bundle savedInstanceState)
{
  base.OnCreate(savedInstanceState);

  Xamarin.Essentials.Platform.Init(this, savedInstanceState);
  global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
  LoadApplication(new App("string123"));
}

选项 2

另一个我不喜欢的选项可能是将 MainActivity 的实例传递给 App,如下所示

protected override void OnCreate(Bundle savedInstanceState)
{
  base.OnCreate(savedInstanceState);

  this.Intent.PutExtra("message", "string1234");

  Xamarin.Essentials.Platform.Init(this, savedInstanceState);
  global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
  LoadApplication(new App(this));

}

然后在 App 构造函数中你使用这个实例如下

Android.App.Activity _mainActivity;

public App(object mainActivity)
{
  InitializeComponent();

  string message = "Void";

  if (Device.RuntimePlatform == Device.Android)
  {
    _mainActivity = (Android.App.Activity)mainActivity;
    message = _mainActivity.Intent.Extras.GetString("message", "");
  }

  MainPage = new AppShell(message);
}

【讨论】:

  • 我会勾选这个答案。我的错。我需要说 - “我需要传递一个带有本地通知的参数”。在通知中,我将传递参数 =“id”(数据库中记录的 id)。加载带有“id”的页面后。
  • @alexandrf,我看到你发布了一个新问题。考虑应用上述选项 2。在 OnResume 中,您应该可以调用 message = _mainActivity.Intent.Extras.GetString("message", "");
  • 是的。这。现在我可以调用message = _mainActivity.Intent.Extras.GetString("message", ""); 但在 MainActivity.cs 我看到这个:在函数LoadApplication(new App()); CS7036:没有给出对应于'App.App(对象)'
  • @alexandrf,请在我上面的回答中的 Option 2 部分下查看OnCreate(Bundle savedInstanceState) 的定义(在那里你会看到你必须写new App(this)
  • 是的,我看到了。但感谢您更正评论,我可能没有看到它。感谢您一直以来对我的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
相关资源
最近更新 更多