Visual Studio 2015 - Xamarin - Android - 当我尝试在 .cs 文件中执行任何操作时得到 "resource.id does not contain a definition for xxx"
Visual Studio 2015 - Xamarin - Android - Getting "resource.id does not contain a definition for xxx" when I try to do anything in the .cs file
Adding Additional Activity .cs and Layout axml Using Visual Studio 2015.
我对 Xamarin 和 Android 开发还很陌生,但已经使用 VB 和现在的 C# 开发了几年。我在 Android 4.2 上有一个简单的应用程序,随着我的进行,它变得越来越复杂。很简单,我想向项目添加一个额外的 GpsAction.cs 和相应的 Gps.axml 布局。似乎不可能找到正确的组合语法来实现这一目标。我有一个 main.axml 的 mainActivity。在 VS 2015 中,添加新内容非常简单,但我不断收到 "resource.id does not contain a definition for" 非常感谢您对此的帮助
namespace AddCam
{
[Activity(Label = "GpsActivity")]
public class GpsActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.GpsLayout);
string c = FindViewById<TextView>(**Resource.Id.textView1**).Text;
// Create your application here
}
}
我将文本字段 "id" 从“@+id/imageView1”更改为“1”,保存、重建并将其改回“@+id/imageView1”,它已修复它。我想补充一点,整个问题都来自
- 添加新的 activity 和布局。
- 使用我拥有的另一个应用程序中已有的代码。
- 正在将代码从原始应用程序复制并粘贴到新应用程序 Activity
和布局。
所有相当常见的东西,真正的问题似乎总是向主 Activity 添加任何新的活动和布局。它可能会变得非常复杂,并且没有(我知道)合乎逻辑的方法来 运行 解决 Xamarin
的问题。与 10 年前(我尝试编写的最后一个移动应用程序)相比,不要误会我的意思,Xamarin 是天堂。优秀的编码人员,现在如果我只能弄清楚为什么关键字“this”在添加的Activity.cs
只需像这样添加名称空间Android.Resource.Id - 我就解决了
已清除 Main.axml 页面并重置,它正在运行。
对于仍然面临此问题的人,布局文件的默认 Build Action 将设置为 TransformFile
。 Select 布局,转到布局属性,然后在属性窗格中,Select AndroidResource
作为构建操作。清理构建您的项目,它应该可以工作。
我找到的最佳解决方案是构建解决方案。
从构建菜单中选择 构建解决方案(或Ctrl+Shift+B).
此操作将解决问题。
您应该在应用程序的axml 中为android:id="@+id/button1"
添加设置值,然后重建项目并重试。
像这样Button button = (Button)FindViewById(Resource.Id.button1);
.
检查 Resource.Designer class 文件。会有一个class喜欢public partial class Id
。那里写入了控件的整数 ID。使用它们代替 Resource.Id
什么对我有用(Visual Studio 2017,打开一个旧的 Xamarin 项目):
- 删除 obj 和 bin 文件夹,构建。
- 如果错误,请重新启动Visual Studio(我知道这很痛苦)。
- 再次构建
现在资源将可见(当然,如果您正确定义了它)。
我的问题是我尝试使用 Xamarin Live Player 调试 Xamarin Android 项目(本机),使用 USB 数据线连接并选择我的设备进行调试解决了问题
检查您的布局文件中是否缺少这些命名空间 -
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
确保您的 axml 格式正确并重建它应该工作的解决方案,如果您仍然面临同样的问题,请删除 axml 并再次添加它,然后构建解决方案。
在 Visual Studio 2019 中,当您向项目添加新的 Android 布局时,它会添加为 .xml 文件。我已经在 Resources/layout 文件夹中创建了一些早期的布局,扩展名为 .axml(不是 .xml),我更改了扩展名 .xml -> .axml 成功了。
我知道这个问题很老了,但我在 Visual Studio 2019 年也 运行 研究过它,并找到了解决方案。
对我来说,问题发生在向布局添加元素然后尝试添加代码时。该问题似乎与项目的构建方式有关。
将元素添加到您的布局,然后构建您的项目,然后再添加任何其他代码。显然 Resource.Id 在构建之前不会使用其他成员进行更新,并且在 Resource.Id 识别它之前尝试在代码中引用新成员会阻止构建项目。
正如 Maniacz 所说,在 VS 2019 中,我只需将 XML 更改为资源
下布局文件夹中布局的 axml 扩展名
对于尽管 运行 clean/build/rebuild 对我不起作用但仍在寻找答案的其他人:
我刚刚在VS中安装了一些用于xamarin开发的工具。尽管 build/rebuild 可能确实有效,但就我而言,我相信也解决了它的问题是关闭并重新打开 VS。我很确定我遇到了一些问题,主要是由于新安装的工具(在我的例子中是 android SDK)需要重新启动 VS。如果您正在处理一个已经安装了所需工具的项目,请按照其他人所说的进行尝试 - build/rebuild.
(VS 2019) 我做了之前的解决方案但什么也没做,我遇到了同样的问题,我的解决方案是从 TextView 的文本中删除“&”,我试图将文本设置为 "text&text" 甚至 &&(我虽然它就像 WindowsForms 中的助记符一样)没有用,所以我不得不删除它并修复它。
我不得不为我的布局文件修改 Build Action
,并重新设置原来的 Build Action
,因为它是以前设置的。这使我的 visual studio 在 Resource.designer.cs
文件中重新生成资源 ids
。
步骤#1:
转到缺少其 id 的布局文件的属性,然后单击 Build Action DropDown。
步骤 #2:
Select 下拉列表中除 AndroidResource
以外的内容。
步骤 #3:
从该构建操作中重新选择 AndroidResource
。
现在,您将重新生成 Resource.designer.cs
文件,它将在布局文件中包含您的控件的引用 ID。
Adding Additional Activity .cs and Layout axml Using Visual Studio 2015.
我对 Xamarin 和 Android 开发还很陌生,但已经使用 VB 和现在的 C# 开发了几年。我在 Android 4.2 上有一个简单的应用程序,随着我的进行,它变得越来越复杂。很简单,我想向项目添加一个额外的 GpsAction.cs 和相应的 Gps.axml 布局。似乎不可能找到正确的组合语法来实现这一目标。我有一个 main.axml 的 mainActivity。在 VS 2015 中,添加新内容非常简单,但我不断收到 "resource.id does not contain a definition for" 非常感谢您对此的帮助
namespace AddCam
{
[Activity(Label = "GpsActivity")]
public class GpsActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.GpsLayout);
string c = FindViewById<TextView>(**Resource.Id.textView1**).Text;
// Create your application here
}
}
我将文本字段 "id" 从“@+id/imageView1”更改为“1”,保存、重建并将其改回“@+id/imageView1”,它已修复它。我想补充一点,整个问题都来自
- 添加新的 activity 和布局。
- 使用我拥有的另一个应用程序中已有的代码。
- 正在将代码从原始应用程序复制并粘贴到新应用程序 Activity 和布局。
所有相当常见的东西,真正的问题似乎总是向主 Activity 添加任何新的活动和布局。它可能会变得非常复杂,并且没有(我知道)合乎逻辑的方法来 运行 解决 Xamarin
的问题。与 10 年前(我尝试编写的最后一个移动应用程序)相比,不要误会我的意思,Xamarin 是天堂。优秀的编码人员,现在如果我只能弄清楚为什么关键字“this”在添加的Activity.cs
只需像这样添加名称空间Android.Resource.Id - 我就解决了
已清除 Main.axml 页面并重置,它正在运行。
对于仍然面临此问题的人,布局文件的默认 Build Action 将设置为 TransformFile
。 Select 布局,转到布局属性,然后在属性窗格中,Select AndroidResource
作为构建操作。清理构建您的项目,它应该可以工作。
我找到的最佳解决方案是构建解决方案。 从构建菜单中选择 构建解决方案(或Ctrl+Shift+B). 此操作将解决问题。
您应该在应用程序的axml 中为android:id="@+id/button1"
添加设置值,然后重建项目并重试。
像这样Button button = (Button)FindViewById(Resource.Id.button1);
.
检查 Resource.Designer class 文件。会有一个class喜欢public partial class Id
。那里写入了控件的整数 ID。使用它们代替 Resource.Id
什么对我有用(Visual Studio 2017,打开一个旧的 Xamarin 项目):
- 删除 obj 和 bin 文件夹,构建。
- 如果错误,请重新启动Visual Studio(我知道这很痛苦)。
- 再次构建
现在资源将可见(当然,如果您正确定义了它)。
我的问题是我尝试使用 Xamarin Live Player 调试 Xamarin Android 项目(本机),使用 USB 数据线连接并选择我的设备进行调试解决了问题
检查您的布局文件中是否缺少这些命名空间 -
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
确保您的 axml 格式正确并重建它应该工作的解决方案,如果您仍然面临同样的问题,请删除 axml 并再次添加它,然后构建解决方案。
在 Visual Studio 2019 中,当您向项目添加新的 Android 布局时,它会添加为 .xml 文件。我已经在 Resources/layout 文件夹中创建了一些早期的布局,扩展名为 .axml(不是 .xml),我更改了扩展名 .xml -> .axml 成功了。
我知道这个问题很老了,但我在 Visual Studio 2019 年也 运行 研究过它,并找到了解决方案。
对我来说,问题发生在向布局添加元素然后尝试添加代码时。该问题似乎与项目的构建方式有关。
将元素添加到您的布局,然后构建您的项目,然后再添加任何其他代码。显然 Resource.Id 在构建之前不会使用其他成员进行更新,并且在 Resource.Id 识别它之前尝试在代码中引用新成员会阻止构建项目。
正如 Maniacz 所说,在 VS 2019 中,我只需将 XML 更改为资源
下布局文件夹中布局的 axml 扩展名对于尽管 运行 clean/build/rebuild 对我不起作用但仍在寻找答案的其他人:
我刚刚在VS中安装了一些用于xamarin开发的工具。尽管 build/rebuild 可能确实有效,但就我而言,我相信也解决了它的问题是关闭并重新打开 VS。我很确定我遇到了一些问题,主要是由于新安装的工具(在我的例子中是 android SDK)需要重新启动 VS。如果您正在处理一个已经安装了所需工具的项目,请按照其他人所说的进行尝试 - build/rebuild.
(VS 2019) 我做了之前的解决方案但什么也没做,我遇到了同样的问题,我的解决方案是从 TextView 的文本中删除“&”,我试图将文本设置为 "text&text" 甚至 &&(我虽然它就像 WindowsForms 中的助记符一样)没有用,所以我不得不删除它并修复它。
我不得不为我的布局文件修改 Build Action
,并重新设置原来的 Build Action
,因为它是以前设置的。这使我的 visual studio 在 Resource.designer.cs
文件中重新生成资源 ids
。
步骤#1:
转到缺少其 id 的布局文件的属性,然后单击 Build Action DropDown。
步骤 #2:
Select 下拉列表中除 AndroidResource
以外的内容。
步骤 #3:
从该构建操作中重新选择 AndroidResource
。
现在,您将重新生成 Resource.designer.cs
文件,它将在布局文件中包含您的控件的引用 ID。