使用IMvxMessenger获取Messege两次

时间:2015-09-21 11:38:13

标签: android xamarin mvvmcross

我正在使用Xamrin Android应用程序而我正在使用MvvmCross。在我的应用程序中我使用了IMvxMessenger.But当我更改视图并回到同一视图时,我得到两次消息。然后它崩溃了。 解决办法是什么 ? 这是我的代码: 在ViewModel中我有这个代码:

var messanger = Mvx.Resolve<IMvxMessenger>();
var message = new MyMessage(this,"Product has been added",cartListCount);
messanger.Publish(message);

And On View我有这个代码:

 private MvxSubscriptionToken _token;

 public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
         {
        var view = base.OnCreateView(inflater, container, savedInstanceState);

         messenger = Mvx.Resolve<IMvxMessenger>();
        _token = messenger.SubscribeOnMainThread<MyMessage>(OnInputIsNeeded,MvxReference.Strong);

         return view;
         }

    private void OnInputIsNeeded(MyMessage _Message)
    {
        Toast.MakeText (this.Activity,_Message.Message, ToastLength.Short).Show();
        messenger.Unsubscribe<MyMessage> (_token);
    }

1 个答案:

答案 0 :(得分:5)

视图(无论是活动还是片段)始终被创建和销毁。由于您在 OnCreateView()中订阅,因此您应该在 OnDestroyView()中取消订阅。

可能发生的事情是 OnCreateView()被多次调用并导致多个订阅被添加。 MvxMessenger 正在向所有订阅者广播该消息。如果View被销毁,但尚未取消订阅,则由于回调不再存在,它可能会崩溃。