Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用IMvxMessenger获取消息两次_Android_Xamarin_Mvvmcross - Fatal编程技术网

Android 使用IMvxMessenger获取消息两次

Android 使用IMvxMessenger获取消息两次,android,xamarin,mvvmcross,Android,Xamarin,Mvvmcross,我正在开发Xamrin Android应用程序,我正在使用MvvmCross。在我的应用程序中,我使用了IMvxMessenger。但是当我更改视图并返回到同一视图时,我收到了两次消息。然后它崩溃了。 解决办法是什么? 这是我的密码: 在ViewModel中,我有以下代码: var messanger = Mvx.Resolve<IMvxMessenger>(); var message = new MyMessage(this,"Product has been added",ca

我正在开发Xamrin Android应用程序,我正在使用MvvmCross。在我的应用程序中,我使用了IMvxMessenger。但是当我更改视图并返回到同一视图时,我收到了两次消息。然后它崩溃了。 解决办法是什么? 这是我的密码: 在ViewModel中,我有以下代码:

var messanger = Mvx.Resolve<IMvxMessenger>();
var message = new MyMessage(this,"Product has been added",cartListCount);
messanger.Publish(message);
var-messanger=Mvx.Resolve();
var消息=新的MyMessage(此“产品已添加”,cartListCount);
发布(消息);
在视图中,我有以下代码:

 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);
    }
private MvxSubscriptionToken\u令牌;
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
var view=base.OnCreateView(充气机、容器、savedInstanceState);
messenger=Mvx.Resolve();
_token=messenger.SubscribeOnMainThread(onInputsNeed,MvxReference.Strong);
返回视图;
}
私有void onInputsNeed(MyMessage\u Message)
{
Toast.MakeText(this.Activity,_Message.Message,ToastLength.Short).Show();
取消订阅(_令牌);
}
视图(无论是活动还是片段)始终被创建和销毁。由于您是在OnCreateView()中订阅,因此应该在OnDestroyView()中取消订阅

可能发生的情况是,OnCreateView()被多次调用,并导致添加多个订阅。MvxMessenger正在向所有订户广播消息。如果视图被破坏,但尚未取消订阅,则可能会崩溃,因为回调已不存在