使用 MvxAppCompatActivity 时出错

Error when using MvxAppCompatActivity

我正在用 Xamarin.Android 和 MvvmCross 编写应用程序。我希望我的 Activity 继承自 MvxAppCompatActivity 以便我可以使用片段。这是我的基地 class:

public class BaseActivity<TViewModel> : MvxAppCompatActivity<TViewModel> where TViewModel : MvxViewModel
{
    public new TViewModel ViewModel
    {
        get { return base.ViewModel; }
        set { base.ViewModel = value; }
    }
}

我在 ActivityOnCreate 上收到此错误:

Failed resolution of: Landroid/support/v7/appcompat/R$drawable; Didn't find class "android.support.v7.appcompat.R$drawable" on path: DexPathList...

但是如果我将 MvxAppCompatActivity 更改为 MvxActivity 它工作正常...为什么?

可能有多种原因,但可能是缺少某些 android 支持包。主要是缺少 Xamarin.Android.Support.Design 会导致该错误。因此,请检查您是否添加了它,如果没有添加它,它应该可以解决您的问题。 如果不是,则很可能您缺少其他一些 android 支持包

我下载了您的解决方案并尝试构建 Android 项目。它因出现 18 次相同错误而失败:

error: No resource identifier found for attribute 'loginButtonBackgroundColor' in package ...

所以在稍微检查一下您的解决方案之后,我执行了以下步骤来解决您的问题:

1) 在 login_screen.axml 我看到你有这行:

xmlns:[YOURNAMESPACE]="http://schemas.android.com/apk/res/[YOUR PACKAGE]"

这是不必要的。删除它并将行 [YOURNAMESPACE]:loginButtonBackgroundColor=... 更改为 local:loginButtonBackgroundColor=... 后,构建成功。

2) 我看到一些布局文件位于 /drawable 文件夹中(button_round_corner.xmlinput_box.xmllogin_button.xml)。我将它们移动到 /layout 文件夹并修复了更改产生的问题(只有两个)。

3) 使 Setup class 继承自 MvxAppCompatSetup.

4) 在 LoginButton 控件上添加了 RegisterAttribute。所以 class 定义看起来像这样:

using Android.Runtime;
...

namespace Xxx.Droid.Components
{
    [Register(nameof(LoginButton))]
    public class LoginButton : FrameLayout, IMvxNotifyPropertyChanged
    {
        ...
    }
}

就是这样!可能 (2) 不是必需的,但以防万一。