首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MessagingCenter回调未被调用

MessagingCenter回调未被调用
EN

Stack Overflow用户
提问于 2019-02-13 13:55:56
回答 1查看 494关注 0票数 0

我正在使用Xamarin MessagingCenter实现设备定位检测器。我想要做的是从我的安卓项目中的MainActivity发送消息到我的.NET标准项目中的Singleton类实现。

如您所见,我重写了“OnConfigurationChanged(.)”方法在我的MainActivity内部和所有断点在我的IF语句中被击中时,我切换方向从景观到肖像。问题是,我较新地接收到了这些消息。在我的"OrientationHelper“中回调是较新的调用。

"OrientationHelper“在加载第一个页面时被实例化(对于那些会说我没有实例的人:)

MainActivity:

代码语言:javascript
复制
public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig)
{
    base.OnConfigurationChanged(newConfig);

    if (newConfig.Orientation == Android.Content.Res.Orientation.Landscape)
        MessagingCenter.Send(this, "OrientationContract"
            , new OrientationChangedEventArgs(Orientation.Landscape));

    else if (newConfig.Orientation == Android.Content.Res.Orientation.Portrait)
        MessagingCenter.Send(this, "OrientationContract"
            , new OrientationChangedEventArgs(Orientation.Portrait));
}

将从MainActivity接收消息的Singleton类:

代码语言:javascript
复制
public class OrientationHelper
{
    private OrientationHelper()
        => MessagingCenter.Subscribe<OrientationChangedEventArgs>(this, "OrientationContract"
            , s => DeviceOrientation = s.Orientation);

    private static OrientationHelper s_instace;
    public static OrientationHelper Instance
    {
        get
        {
            if (s_instace == null)
                s_instace = new OrientationHelper();
            return s_instace;
        }
    }

    private Orientation _deviceOrientation;
    public Orientation DeviceOrientation
    {
        get => _deviceOrientation;
        private set
        {
            if (_deviceOrientation == value)
                return;
            _deviceOrientation = value;
        }
    }
}

OrientationChangedEventArgs:

代码语言:javascript
复制
public class OrientationChangedEventArgs : EventArgs
{
    public Orientation Orientation { get; private set; }

    public OrientationChangedEventArgs(Orientation orientation)
        => Orientation = orientation;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-13 14:02:48

订阅和发送方法的定义如下

  • 订阅(对象订阅者,字符串消息,动作回调,TSender源= null)
  • 发送(TSender发送者,字符串消息)发送(TSender发送方,字符串消息,TArgs args)

这两个调用中的第一个T参数应该匹配发送消息的类的类型。

代码语言:javascript
复制
MessagingCenter.Send<MyType, OrientationChangedEventArgs>(this, "OrientationContract"
        , new OrientationChangedEventArgs(Orientation.Landscape));

MessagingCenter.Subscribe<MyType, OrientationChangedEventArgs>(this, "OrientationContract"
        , s => DeviceOrientation = s.Orientation);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54671908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档