使用来自内容提供商和活动的 MvvmCross

2023-12-04

我正在尝试在我的一个应用程序中使用 MvvmCross v3,该应用程序由活动、内容提供程序和广播接收器组成。然而,我并没有很成功。

该应用程序由一个包含逻辑、模型和视图模型的 Core PCL 和一个包含所有 MonoDroid 特定内容的 Droid 应用程序组成。

在 Core 中,我有一个 App:MvxApplication 类,在 Droid 中,我有一个 Setup:MvxSetup 类,它创建一个应用程序实例并初始化内容。

我可以毫无问题地将 IOC 部件与内容提供商、广播接收器和非 Mvx 活动一起使用。当我现在想添加 MvxActivity 时,它就崩溃了。

当 Mvx Activity 启动时,我收到异常“Cirrious.CrossCore.Exceptions.MvxException:MvxTrace 已初始化”。

显然我正在以错误的顺序/错误的位置初始化事物。但是,我需要一个指向正确方向的指针。

我的应用程序类

public class App
    : MvxApplication
{
    public override void Initialize()
    {
        base.Initialize();
        InitialisePlugins();
        InitaliseServices();
        InitialiseStartNavigation();
    }

    private void InitaliseServices()
    {
        CreatableTypes().EndingWith("Service").AsInterfaces().RegisterAsLazySingleton();
    }

    private void InitialiseStartNavigation()
    {            
    }

    private void InitialisePlugins()
    {
        // initialise any plugins where are required at app startup
        // e.g. Cirrious.MvvmCross.Plugins.Visibility.PluginLoader.Instance.EnsureLoaded();
    }
}

还有我的设置类

public class Setup
    : MvxAndroidSetup
{
    public Setup(Context applicationContext)
        : base(applicationContext)
    {
    }

    protected override IMvxApplication CreateApp()
    {
        return new App();
    }

    protected override IMvxNavigationSerializer CreateNavigationSerializer()
    {
        return new MvxJsonNavigationSerializer();
    }

    public override void LoadPlugins(Cirrious.CrossCore.Plugins.IMvxPluginManager pluginManager)
    {
        pluginManager.EnsurePluginLoaded<Cirrious.MvvmCross.Plugins.Json.PluginLoader>();
        base.LoadPlugins(pluginManager);
    }

    public void RegisterServices()
    {
        // I register a bunch of singletons here
    }

    // The following is called from my content provider's OnCreate()
    // Which is the first code that is run
    public static void DoSetup(Context applicationContext)
    {
        var setup = new Setup(applicationContext);
        setup.Initialize();
        setup.RegisterServices();
    }

我的内容提供商的 OnCreate():

    public override bool OnCreate()
    {
        Log.Debug(Tag, "OnCreate");
        _context = Context;
        Setup.DoSetup(_context);
        return true;
    }

我的 Mvx 活动:

[Activity(Label = "@string/ApplicationName", MainLauncher = true)]
[IntentFilter(new[] { "Settings" })]
public class SettingsView 
    : MvxActivity
{
    public new SettingsViewModel ViewModel
    {
        get { return (SettingsViewModel) base.ViewModel; }
        set { base.ViewModel = value; }
    }

    protected override void OnViewModelSet()
    {
        SetContentView(Resource.Layout.Page_SettingsView);
    }
}

简短回答(我在机场用手机)

  • 所有 mvx android 视图都会检查设置单例是否已创建 -https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.Droid/Platform/MvxAndroidSetupSingleton.cs(vnext 树 - 但在 v3 上类似)

  • 因此,如果您正在创建一个设置,但没有设置此单例,那么您将在第一次显示视图时获得创建的第二个设置

我怀疑您可以通过单例类创建您的设置,但如果这不够灵活以满足您的需求,那么请在 github 上记录问题

也很想看到一些关于此的博客 - 我没有太多使用自定义内容提供程序(根本!)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用来自内容提供商和活动的 MvvmCross 的相关文章

随机推荐

  • 如何从用户处获取一个号码

    我刚刚学习 C 到目前为止 我一直在使用 javascript 和 php 等语言 但我很难将我的一些思维步骤转换为 C 的可能性 我正在编写的程序 听起来比实际要大 使用输入菜单让用户选择一个选项 选项可以是 1 2 或 3 现在 我正在
  • 使用批处理代码批量进行 xml 格式化?

    我有一个包含 50 个子文件夹的文件夹 每个子文件夹包含 2 个 xml 文件 O DATA xml S DATA xml 由于它们在记事本中出现在一行中 因此我必须修复格式 我从类似的问题中找到了这段代码 echo off setloca
  • python 异步特殊类方法 __delete__

    海峡到点 我怎么能够async def特殊类方法 例如 delete 在Python中 为什么我需要这个 为了实现在多个进程之间共享的良好缓存系统 我想从数据库中检索一次数据并将它们存储在缓存中 修改缓存中的数据 当不再使用数据时 更新数据
  • swing 中的 EDT 更新是绝对规则还是有例外?

    在 Swing 中 GUI 应该仅由 EDT 更新 因为 GUI 组件不是线程安全的 我的问题是 如果我有一个除 EDT 之外的线程 专用于更新特定组件 并且该组件不被程序中的任何其他线程访问 只有这个专用线程访问 可以吗 就我而言 我有一
  • Tensorflow,如何将 2D 张量(矩阵)乘以 1D 向量中的相应元素

    我有一个二维矩阵M形状的 batch x dim 我有一个向量V形状的 batch 如何将矩阵中的每一列乘以 V 中的相应元素 那是 我知道一个低效的 numpy 实现将如下所示 import numpy as np M np random
  • Java:哪个更快?局部变量还是访问封装?

    我最近读了一篇StackOverflow问题这表明 访问变量时 使用堆栈比使用堆更快 void f int x 123 lt located in stack int x lt located in heap void f x 123 但是
  • 如何在 swift 闭包中抛出错误?

    请看下面的代码 override func tableView tableView UITableView editActionsForRowAtIndexPath indexPath NSIndexPath gt UITableViewR
  • 打印 PHP 调用堆栈

    我正在寻找一种在 PHP 中打印调用堆栈的方法 如果该函数刷新 IO 缓冲区 则会获得奖励点 比以下内容更具可读性debug backtrace e new Exception var dump e gt getTraceAsString
  • get 请求在 Node.JS 和 Express 中不起作用

    我的 app get 没有运行 我不知道为什么 我也尝试过使用 作为路线 但我无法返回任何内容 我已经发布了下面的代码 const express require express const morgan require morgan co
  • 在android 2.3上通过HTTPS播放.m3u8文件

    在我的代码中的某个时刻 应用程序发现一个指向 m3u8 文件的 URL 这就是接下来发生的事情 mVideoView setVideoURI Uri parse feed getUrl toString feed getUrl return
  • 有没有办法让 Ant 创建 shell 或批处理运行时脚本?

    有没有办法让 Ant 创建运行时 shell 或批处理运行时脚本 而不必自己手动创建脚本 它的功能类似于链接文本 是的 这是可以做到的 这是一个简单的示例 您的链接现在不起作用 抛出了 sourceforge 错误 基本思想是使用echo任
  • 在真实手机(而不是模拟器)上使用 adb logcat

    当我使用 Android 模拟器时 我可以执行 adb logcat 来查看源自我的代码的输出消息 log system out println 它还显示执行期间发生的异常的堆栈跟踪 但是 当我使用真正的手机时 adb logcat 不会执
  • 将单词转换为字符数组

    如何将单词转换为字符数组 可以说我有 肺炎超微硅火山尘肺病 这个词 是的 这是一个词 我想给这个词赋一个数值 a 1 b 2 z 26 int alpha 1 int Bravo 2 基本代码 if testvalue a Debug Wr
  • Android 方向变化

    我的选项卡式应用程序不会通过方向更改重新显示视图 I added android configChanges keyboardHidden orientation 到主选项卡活动和清单中的每个活动 我将这个方法添加到每个活动中 public
  • Objective C 中的 Sqlite 数据库插入语句

    我尝试仅将两个整数变量插入到我的 sqlite 数据库中 我创建了一个名为 ups sqlite 的数据库 它有一个表 upssTable 该表有两列 但是当我打开 Users ds Library Application Support
  • 分解 LPARAM 变量并查看位组

    我知道 LPARAM 变量设置了某些位 在其内部 当我收到 WM KEYDOWN 事件时 这些位可识别诸如长按键等信息 所以我试图分解一个 LPARAM 变量并查看各个位值组和位组以及该值 例如查看第 16 位到第 24 位以及其中的值 我
  • C# HTML 从 WebBrowser 到有效的 XHTML

    因此 我们在编辑模式下使用 webBrowser 控件 允许人们输入文本 然后将该文本发送到服务器供每个人查看 IE 它是一个HTML输入框 该框的 HTML 输出不是标准的 XHTML 因为它只是一个 webBrowser 控件 因此我需
  • 如何检查列表中的哪些项目满足特定条件?

    如何创建一个名为busLineLonger的函数 它至少接收两个参数来决定公交线路是否更长 This is how it works busStops number of the bus number of stops busLineLon
  • 从 MVC 3 中的 ActionResult 类型方法将 JSon 数组返回到 $.ajax

    我有一个 TreeView 助手 它获取类别列表及其链接 我这样做了 helper TreeView FavouriteLinksXmlMVC3 Controllers HomeController cat cat new Favourit
  • 使用来自内容提供商和活动的 MvvmCross

    我正在尝试在我的一个应用程序中使用 MvvmCross v3 该应用程序由活动 内容提供程序和广播接收器组成 然而 我并没有很成功 该应用程序由一个包含逻辑 模型和视图模型的 Core PCL 和一个包含所有 MonoDroid 特定内容的