Xamarin 中的 My Resources.GetIdentifier() 不起作用



我有这样的代码(我使用的是Visual Studio+Xamarin Android(:

KeyMechanism.cs:

using Android.App;
using Android.Content;
using Android.Media;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace myApp
{
class KeyMechanism : Activity
{
private string elementId;
public KeyMechanism(string elementId)
{
this.elementId = elementId;
}
public void ClickHander()
{
int foo = Resources.GetIdentifier(elementId, "id", PackageName);
var myKey = FindViewById( foo );
myKey.Touch += (s, e) =>
{
//Do something
};
}
}
}

myViewAct.cs:

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace myApp
{
public class myViewAct : Activity 
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.myView1);
int testFoo = Resources.GetIdentifier("button1", "id", PackageName);
KeyMechanism myKey1 = new KeyMechanism("button1");
myKey1.ClickHander();
/*...*/
}
}
}

编译过程中出现错误:

Java.Lang.NullPointerException:'尝试调用虚拟方法'android.content.res.Resources android.coontent.Context.getResources(('在空对象引用""上

文件"中的

;KeyMechanism.cs";符合int foo = Resources.GetIdentifier(elementId, "id", PackageName);

我想捕获视图元素,而不是使用Resourece.Id.myId,而是使用一个变量。我不知道我的代码出了什么问题。

我能够重现这个错误。

Java.Lang.NullPointerException: 'Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference'

该错误表示您的方法用于NULL对象。请检查下面的代码。

public class Activity5 : Activity
{
Activity mActivity;
Context context;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your application here
SetContentView(Resource.Layout.layout5);
int testFoo = Resources.GetIdentifier("button1", "id", PackageName);
mActivity = this;
context = Android.App.Application.Context;
KeyMechanism myKey1 = new KeyMechanism("button1", mActivity, context);
myKey1.ClickHander();
}
}
class KeyMechanism : Activity
{
private string elementId;
private Activity mActivity;
private Context context;
public KeyMechanism(string elementId, Activity mActivity, Context context)
{
this.elementId = elementId;
this.mActivity = mActivity;
this.context = context;
}
public void ClickHander()
{
int foo = mActivity.Resources.GetIdentifier(elementId, "id", context.PackageName);
var myKey = mActivity.FindViewById(foo);
myKey.Touch += (s, e) =>
{
//Do something
Console.WriteLine("-----------------");
};
}
}

最新更新