MessagingCenter 正在处理 WPF,但未处理 Android
MessagingCenter is working on WPF but not working on Android
我创建此应用程序是为了回答有关 MessagingCenter 的一些问题,但由于问题 运行 该应用程序专门针对 Android 平台,我无法继续编写代码,如果您知道的话可能是错的请帮助我。感谢支持
我尝试将结果页面更改为消息中心订阅中的新结果视图,但我不知道发生了什么,对我来说就像在订阅中找不到消息一样。
应用程序 Link(GitHub)
在结果视图中:
public void Registro()
{
MessagingCenter.Subscribe<ResultView>(this, "DisplayAlert", message =>
{
this.DisplayAlert("Alerta de Registro", "Mensagem DisplayAlert com registro Enviada", "Ok");
});
}
在主页中:
ResultView ResultPage = new ResultView();
private void GoPaginaResultComRegistro(object sender, EventArgs e)
{
ResultPage.Registro();
MessagingCenter.Send<ResultView>(ResultPage, "DisplayAlert");
MessagingCenter.Unsubscribe<ResultView>(ResultPage, "DisplayAlert");
this.Navigation.PushAsync(ResultPage);
}
我在发送消息时等待另一个屏幕上的 DisplayAlert,但 App 只是跳过了订阅中的代码。
试试这个
public void Registro()
{
MessagingCenter.Subscribe<ResultView,string>(this, "DisplayAlert", async (sender,message) =>
{
await DisplayAlert("Alerta de Registro", message, "Ok");
});
}
var mensagem = "teste";
MessagingCenter.Send<ResultView,string>(ResultPage, "DisplayAlert",mensagem);
这是我在我的项目中使用的一些例子
在我的 PCL MainPage.cs
public MainPage()
{
InitializeComponent();
MessagingCenter.Send<string>("ok", "showBar");
}
在我的原生 android 项目中 MainActivity.cs
protected override void OnCreate(Bundle savedInstanceState)
{
MessagingCenter.Subscribe<string>(this, "showBar", (sender) =>
{
this.Window.ClearFlags(WindowManagerFlags.Fullscreen);
});
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
this.Window.AddFlags(WindowManagerFlags.Fullscreen);
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
您无需创建页面的新实例即可作为参数发送。
首先在你的GoPaginaResultComRegistro()
方法中,你应该在PushAsync
之后发送消息
private void GoPaginaResultComRegistro(object sender, EventArgs e)
{
ResultPage.Registro();
this.Navigation.PushAsync(ResultPage);
MessagingCenter.Send<ResultView>(ResultPage, "DisplayAlert");
MessagingCenter.Unsubscribe<ResultView>(ResultPage, "DisplayAlert");
}
第二个 在你的 ResultView
页面中,在 MainThread
中调用 DisplayAlert
:
public void Registro()
{
MessagingCenter.Subscribe<ResultView>(this, "DisplayAlert", message =>
{
Device.BeginInvokeOnMainThread( async() =>
{
await DisplayAlert("Alerta de Registro", "Mensage DisplayAlert com registro Enviada", "Ok");
});
});
}
我创建此应用程序是为了回答有关 MessagingCenter 的一些问题,但由于问题 运行 该应用程序专门针对 Android 平台,我无法继续编写代码,如果您知道的话可能是错的请帮助我。感谢支持
我尝试将结果页面更改为消息中心订阅中的新结果视图,但我不知道发生了什么,对我来说就像在订阅中找不到消息一样。
应用程序 Link(GitHub)
在结果视图中:
public void Registro()
{
MessagingCenter.Subscribe<ResultView>(this, "DisplayAlert", message =>
{
this.DisplayAlert("Alerta de Registro", "Mensagem DisplayAlert com registro Enviada", "Ok");
});
}
在主页中:
ResultView ResultPage = new ResultView();
private void GoPaginaResultComRegistro(object sender, EventArgs e)
{
ResultPage.Registro();
MessagingCenter.Send<ResultView>(ResultPage, "DisplayAlert");
MessagingCenter.Unsubscribe<ResultView>(ResultPage, "DisplayAlert");
this.Navigation.PushAsync(ResultPage);
}
我在发送消息时等待另一个屏幕上的 DisplayAlert,但 App 只是跳过了订阅中的代码。
试试这个
public void Registro()
{
MessagingCenter.Subscribe<ResultView,string>(this, "DisplayAlert", async (sender,message) =>
{
await DisplayAlert("Alerta de Registro", message, "Ok");
});
}
var mensagem = "teste";
MessagingCenter.Send<ResultView,string>(ResultPage, "DisplayAlert",mensagem);
这是我在我的项目中使用的一些例子
在我的 PCL MainPage.cs
public MainPage()
{
InitializeComponent();
MessagingCenter.Send<string>("ok", "showBar");
}
在我的原生 android 项目中 MainActivity.cs
protected override void OnCreate(Bundle savedInstanceState)
{
MessagingCenter.Subscribe<string>(this, "showBar", (sender) =>
{
this.Window.ClearFlags(WindowManagerFlags.Fullscreen);
});
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
this.Window.AddFlags(WindowManagerFlags.Fullscreen);
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
您无需创建页面的新实例即可作为参数发送。
首先在你的GoPaginaResultComRegistro()
方法中,你应该在PushAsync
private void GoPaginaResultComRegistro(object sender, EventArgs e)
{
ResultPage.Registro();
this.Navigation.PushAsync(ResultPage);
MessagingCenter.Send<ResultView>(ResultPage, "DisplayAlert");
MessagingCenter.Unsubscribe<ResultView>(ResultPage, "DisplayAlert");
}
第二个 在你的 ResultView
页面中,在 MainThread
中调用 DisplayAlert
:
public void Registro()
{
MessagingCenter.Subscribe<ResultView>(this, "DisplayAlert", message =>
{
Device.BeginInvokeOnMainThread( async() =>
{
await DisplayAlert("Alerta de Registro", "Mensage DisplayAlert com registro Enviada", "Ok");
});
});
}