我不能“吨真的按照你的示例代码 - 它并没有真正解释:
- 如何你创建HomeView
- 它是如何获得其信使实例传递给它。
- 什么产生ApplicationError_Message消息
- 你是如何理解与否的信息是或不是到达
作为一个快速测试我修改Android HomeView的InternetMinute样品中 - https://github.com/slodge/MvvmCross-Tutorials/tree/master/InternetMinute
using Android.App;
using Android.OS;
using Cirrious.CrossCore;
using Cirrious.MvvmCross.Droid.Views;
using Cirrious.MvvmCross.Plugins.Messenger;
using InternetMinute.Core;
namespace InternetMinute.Droid.Views
{
[Activity(Label = "Internet time is ticking")]
public class HomeView : MvxActivity
{
private MvxSubscriptionToken _token;
private IMvxMessenger _messenger;
protected IMvxMessenger Messenger
{
get
{
_messenger = _messenger ?? Mvx.Resolve<IMvxMessenger>();
return _messenger;
}
}
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.HomeView);
}
protected override void OnResume()
{
base.OnResume();
_token = Messenger.SubscribeOnMainThread<TickMessage>(OnTick);
}
protected override void OnPause()
{
Messenger.Unsubscribe<TickMessage>(_token);
_token = null;
base.OnPause();
}
private int _i = 0;
private void OnTick(TickMessage obj)
{
Mvx.Trace("Tick received {0}", ++_i);
}
}
}
这似乎工作正常 - 我得到了我期待的踪迹。
也许你的SubscribeOnMainThread没有订阅正确的消息类型 - 编译器推断什么类型?
这是有效的 - 就我的代码而言,我期待框架在构造函数中注入信使,但正如我从您的示例中可以看出,它不会那样做,并且需要使用Mvx.Resolve (),然后订阅OnResume中的消息并在OnPause中取消订阅。谢谢! –
samneric
那么你看到了什么 - 一个空引用异常?还是你提供了多个构造函数?你可以在问题中提供的信息越多,我就会越好地尝试定位我的答案 - 谢谢:) 至于OnPause/OnResume,这只是我的例子所做的 - 对你的应用程序有什么作用取决于生命周期的用途你的应用程序,你的活动和你的消息 - 这取决于你的代码:) – Stuart
我不知道在哪里订阅消息,所以我遵循了与.Core PCL中使用的相同的方法 - 即我创建了一个构造函数IMvxMessenger输入参数,并预计它将由MvvmCross注入。调试完成后,我发现构造函数从未被解雇,于是我知道MvvmCross在Droid应用程序中没有这样的工作方式。我只需要知道正确的方法来获得您所回答的MvxMessenger。我想我需要一个N + x教程或一些示例 - 您提供的GitHub链接 - 非常感谢! – samneric