我正在使用 Support.V7.NotificationCompat
显示通知。单击此通知时,我想导航到 ViewModel。当我尝试使用 MvxViewModelRequest
显示 ViewModel 时,我传递给 ViewModel 的导航参数不起作用,但当我像这样使用 ShowViewModel 时它有效:
ShowViewModel<RouteModificationViewModel>(new { id = existingModification.Id });
这是 ViewModel Init 方法。当我使用 ShowViewModel
导航时,Guid 具有正确的值。当我使用 MvxViewModelRequest
导航时,Guid 始终具有值 Guid.Empty
(全为 0)。
public void Init(Guid id)
{
_routeModificationId = id;
}
这就是我试图从通知中显示 ViewModel 的方式:
public void ShowRouteModifiedNotification(RouteModificationModel routeModificationModel)
{
var context = Application.Context;
var builder = new NotificationCompat.Builder(context);
builder.SetDefaults(NotificationCompat.DefaultAll);
builder.SetCategory(NotificationCompat.CategoryStatus);
builder.SetAutoCancel(true);
builder.SetPriority(NotificationCompat.PriorityHigh);
builder.SetSmallIcon(Resource.Mipmap.ic_launcher);
builder.SetContentTitle("Route Modification");
builder.SetContentText("Hello, World!");
builder.SetContentIntent(GetIntent(routeModificationModel.Id));
builder.SetVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });
builder.SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification));
var notification = builder.Build();
var notificationManager = (NotificationManager)context.GetSystemService(Context.NotificationService);
var handler = new Handler(Looper.MainLooper);
handler.Post(() =>
{
notificationManager.Notify(RouteModificationNotificationId, notification);
});
}
private PendingIntent GetIntent(Guid guid)
{
var request = MvxViewModelRequest<RouteModificationViewModel>.GetDefaultRequest();
var json = Mvx.Resolve<IMvxJsonConverter>().SerializeObject(new { id = guid });
request.PresentationValues = new Dictionary<string, string>
{
{ "id", json }
};
var translator = Mvx.Resolve<IMvxAndroidViewModelRequestTranslator>();
var intent = translator.GetIntentFor(request);
return PendingIntent.GetActivity(Application.Context, 0, intent, 0);
}
谁能看出我遗漏了什么或做错了什么?
最佳答案
MvvmCross 在 MvvmCross 5.0 及更高版本中对导航工作方式进行了重大更新。如果您使用的是 MvvmCross 4.x 或 3.x,则此问题可能仅相关。在这种情况下,4.x 中的 MvvmCross 导航 API 没有正确序列化 Guid。您可以通过将 Guid 序列化为字符串并将该字符串作为导航参数传递,然后将该字符串反序列化回 ViewModel 中的 Guid 来解决此问题。
关于android - MvvmCross Navigate to ViewModel on Android 通知点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35488194/