2013-03-08 48 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 
     } 
    } 

}