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(Mono for Android)に変換されますか?
まったく同じパターンを試してみると、次のようになります。

エラーCS0038:外部タイプ Test.MainActivity' via nested type Test.MainActivity.SectionsPagerAdapterの非静的メンバーにアクセスできません'(CS0038)

もちろん、Contextオブジェクトを渡すこともできますが、それを行うのは面倒なようです。

4

2 に答える 2

3

Xamarin.AndroidのAPI設計ドキュメントによると:

内部クラスとも呼ばれる非静的ネストクラスは、大幅に異なります。それらには、それらを囲む型のインスタンスへの暗黙の参照が含まれ、静的メンバーを含めることはできません(この概要の範囲外の他の違いの中でも)。

したがって、への参照を渡す必要がありMainActivityます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 に答える