ben*_*gen 1 c# android xamarin.android
我有一个Mono for Android项目,使用以下代码编译并成功运行.但是,复制/粘贴到我正在处理的新项目中会导致编译器错误,指示:[appnamespace] .Android.Resource.Layout不包含'SimpleListItem2'的定义.
如果我试图访问我定义的xml资源布局,我会发现错误,但我正在尝试访问Google提供的默认资源布局,特别是'SimpleListItem2'.有什么我需要做的让编译器识别默认布局?谢谢!
public override View GetView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null) {
LayoutInflater li = (LayoutInflater)this.Context.GetSystemService(Context.LayoutInflaterService);
v = li.Inflate(Android.Resource.Layout.SimpleListItem2, null);
}
TextView tt = (TextView)v.FindViewById(Android.Resource.Id.Text1);
if (tt != null) { tt.Text = string.Format("{0}, {1}", this.LastName, this.FirstName); }
return v;
}
Run Code Online (Sandbox Code Playgroud)
基本上,我正在寻找在Android.Resource.Layout命名空间下的Mono.Android程序集中访问这些布局:
ActivityListItem
BrowserLInkContextHeader
ExpandableListContent
PreferenceCategory
SelectDialogItem
SelectDialogMultiChoice
SelectDialogSingleChoice
SimpleDropDownItem1Line
SimpleExpandableListItem1
SimpleExpandableListItem2
SimpleGalleryItem
SimpleListItem1
SimpleListItem2
SimpleListItemChecked
SimpleListItemMultipleChoice
SimpleListItemSingleChoice
SimpleListItemDropDownItem
SimpleSpinnerItem
TestListItem
TwoLineListItem
这是一种C#语言功能,其行为符合C#语言规范.
考虑这个例子:
using System;
namespace Example {
namespace System {
}
class Bad : System.Object {
}
}
Run Code Online (Sandbox Code Playgroud)
以上无法编译:
ns.cs(8,24): error CS0234: The type or namespace name `Object' does not exist in
the namespace `Example.System'. Are you missing an assembly reference?
Run Code Online (Sandbox Code Playgroud)
对于.NET CSC和Mono的mcs编译器都是如此.
为什么?请参见§10.8命名空间和C#语言规范的类型名称,第100-102页.
- 否则,namespace-or-type-name的形式
N.I或形式N.I<A1, ..., AK>.N首先解析为名称空间或类型名称.
在这种情况下,我们正在处理System.Object,这是形式N.I.所以我们需要先解决System:
- 否则,如果namespace-or-type-name的形式
I或形式I<A1, ..., AK>:
...
- 否则,对于每个名称空间N,从发生namespace-or-type-name的名称空间开始,继续使用每个封闭的名称空间(如果有),并以全局名称空间结束,将评估以下步骤,直到找到实体为止:...
这会将令牌解析System为Example.System.现在System已解决,编译器尝试解析System.Object,即完全限定名称Example.System.Object.此类型不存在,我们收到错误.
以上样本的修复?用途global:::
class Bad : global::System.Object {
}
Run Code Online (Sandbox Code Playgroud)
您的Android代码也是如此; 如果您碰巧在
Example.Android命名空间内并且需要使用该Android.Resource.Layout
类型,那么请使用global::Android.Resource.Layout.
或者您可以使用在声明点解析的using-alias,允许:
using System;
using MyObject = System.Object;
namespace Example {
namespace System {
}
class Bad : MyObject {
}
}
Run Code Online (Sandbox Code Playgroud)
似乎命名空间冲突导致此错误.在命名空间中使用"Android"时会收到警告.
如果应用程序的命名空间包含"Android",则Xamarin的Mono for Android编译器似乎很难解析Google的SimpleListItem2对象.
要体验错误,"Android"字符串需要是命名空间中的完整字符串(不是子字符串).命名空间"BenHorgen.Android.MyApps.TestApp" 将导致编译器错误.
更具体地说,在命名空间中包含字符串"Android"作为子字符串不会导致问题.例如:"BenHorgen.MyAndroidApps.TestApp"不会对我造成问题.
| 归档时间: |
|
| 查看次数: |
2830 次 |
| 最近记录: |