0

我有一个MonoDroid应用程序项目(我们称之为mainApp)。此引用app.Screen项目,这是一个 MFA 库项目。最初,我的活动是在mainApp项目中。一切正常。我需要在项目中放置一些活动(和资源、可绘制对象等)app.Screen。我已将我需要的所有资源转移到app.Screen项目中。它构建良好,并且在我的活动(位于 app.screens 中)中我可以访问Resource.Layout.filename,甚至可以访问Layout.Id.name.

但是,当我运行应用程序时,SetContentView(Resource.Layout.filename)我得到了错误的布局文件。这显然会导致FindById<Button>()返回null,因为它在此布局文件中没有这些按钮。

我发现我的 MFA 库项目中的相同 Layout 文件的 Id 与 mainApp 项目中的 Id 不同,如下所示:

// In the mainApp project
public partial class Layout
{
    // aapt resource value: 0x7f030001
    public const int DeliveryScreenLayout = 2130903041;

    // aapt resource value: 0x7f03000a
    public const int splash_screen_layout = 2130903050;

    private Layout()
    {
    }
}

// in app.screen library project
public partial class Layout
{

    // aapt resource value: 0x7f030000
    public static int has_hello_layout = 2130903040;

    // aapt resource value: 0x7f030001
    public static int splash_screen_layout = 2130903041;

    private Layout()
    {
    }
}

我正在使用带有 MFA 4.0 的 VS 2010,并且我的项目针对的是 Android 4.0。我试过Clean & Build,删除/Bin/Obj文件夹,没有运气。任何帮助将非常感激。

4

1 回答 1

0

This appeared to be a bug in MonoDroid, here is the link to the bug in Xamarin bugzilla

This is caused by the Resource.Designer.cs in the MFA library project has a different ID (int) values than what the main project has in its Resource.Designer.cs file.

I have worked out a workaround for it. In my mainApp I manually call mainApp.Resources.UpdateIdValues(); and that would update the Resources id values in the other MFA library projects

Xamarin said that this bug was resolved in 4.6.4. I have not tested this fix though

于 2013-06-17T03:57:05.543 回答