2013-03-08 46 views
1

中的Android/Java开发一个典型的模式是有一个父类的访问方法嵌套类:转换Java的嵌套类Xamarin.Android

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

我总是提取嵌套类并在构造函数中传递Activity。 – 2013-03-08 23:20:43

+1

另外,可以查看http://docs.xamarin.com/guides/android/advanced_topics/api_design的第4.5节。 – 2013-03-08 23:36:05

+0

嗯...解释它。写下来作为答案,我会接受它 – 2013-03-09 00:10:29

回答

2

根据API design文件Xamarin.Android的:

非静态内部类,也被称为内部类,有显著不同。它们包含对其封闭类型实例的隐式引用,并且不能包含静态成员(以及本概述范围之外的其他差异)。

因此,您应该将参考MainActivity传递给SectionsPagerAdapter。然后,您可以访问MainActivity的成员。

+0

你能写一个例子吗? – 2014-05-03 15:58:50

0

这里是一个例子。我希望它有帮助。

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

}