将Java嵌套类转换为Xamarin.Android

时间:2013-03-08 23:11:59

标签: java android xamarin.android

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对象,但这似乎很乏味。

2 个答案:

答案 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
        }
    }

}