1

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

public class MainActivity extends FragmentActivity {

  // implementation

  public class SectionsPagerAdapter extends FragmentPagerAdapter {
    String someString = getString(R.string.thestring);
  }
}

所以在这种情况下,Context.getString()将访问MainActivity上下文。
这将如何转换为Xamarin.Android(Android 的 Mono)?
当尝试完全相同的模式时,我得到:

错误 CS0038:无法访问外部类型 Test.MainActivity' via nested type Test.MainActivity.SectionsPagerAdapter' (CS0038)的非静态成员

我当然可以传递一个 Context 对象,但这似乎很乏味。

4

2 回答 2

3

根据 Xamarin.Android 的API 设计文档:

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

MainActivity因此,您应该传递to的引用SectionsPagerAdapter。然后,您可以访问MainActivity.

于 2013-03-09T00:19:17.810 回答
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
        }
    }

}
于 2015-01-21T11:25:32.453 回答