Resource.Layout.filename is returning the wrong layout file

做~自己de王妃 提交于 2019-12-13 21:30:38

问题


I have a MonoDroid application project (let's call it mainApp). This references app.Screen project, which is a MFA library project. Initially, my activities were in the mainApp project. Everything was working fine. I needed to put some Activities (and resource, drawables, etc) in the app.Screen project. I have moved all the resources I need to the app.Screen project. It builds fine and in my activities (which are sitting in app.screens) I can access Resource.Layout.filename and even Layout.Id.name.

However, when I run the application, in SetContentView(Resource.Layout.filename) I get the wrong layout file . This causes FindById<Button>() to return null obviously because it does not have these buttons in this layout file.

I found that same Layout file has different Id in my MFA library project than what is in the mainApp project like this:

// 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()
    {
    }
}

I am using VS 2010 with MFA 4.0 and my projects are targeting Android 4.0. I have tried Clean & Build, Removing /Bin and /Obj folder, with no luck. Any help would be much appreciated.


回答1:


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



来源:https://stackoverflow.com/questions/17139479/resource-layout-filename-is-returning-the-wrong-layout-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!