我不能「噸真的按照你的示例代碼 - 它並沒有真正解釋:
- 如何你創建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