Android / Java开发中的典型模式是拥有一个嵌套类,可以从父类访问方法:
public class MainActivity extends FragmentActivity {
// implementation
public class SectionsPagerAdapter extends FragmentPagerAdapter {
String someString = getString(R.string.thestring);
}
}
因此,在这种情况下,Context.getString()
将访问MainActivity
上下文
如何转换为Xamarin.Android
(Mono for Android)?
当我尝试完全相同的模式时:
错误CS0038:无法访问外部类型的非静态成员
Test.MainActivity' via nested type
Test.MainActivity.SectionsPagerAdapter'(CS0038)
我当然可以传递一个Context对象,但这似乎很乏味。
答案 0 :(得分:3)
根据Xamarin.Android的API design文件:
非静态嵌套类(也称为内部类)明显不同。它们包含对其封闭类型的实例的隐式引用,并且不能包含静态成员(除了本概述范围之外的其他差异)。
因此,您应该将MainActivity
的引用传递给SectionsPagerAdapter
。然后,您可以访问MainActivity
的成员。
答案 1 :(得分:2)
这是一个例子。我希望它有所帮助。
public class YourParentClassActivity : Activity
{
//your stuff
//...
//The Nested Class (that can implement any interface or base class)
class YourNextedExampleClass : WebViewClient
{
//Parent Class Reference
private YourParentClassActivity _pc;
public YourNextedExampleClass(YourParentClassActivity pc)
{
_pc = pc;
}
public override void OnReceivedSslError(WebView view, SslErrorHandler handler, SslError SSLError)
{
Intent i = new Intent(Intent.ActionView, Android.Net.Uri.Parse("xxx");
_pc.StartActivity(i);
_pc.Finish();
handler.Proceed(); // Ignore SSL certificate errors
}
}
}