4

Xamarin.Android を使用した Android 開発は初めてで、次の問題を修正する方法を知りたいです。

Android アプリケーションをバックグラウンドから復元した後、次のエラーに直面することがありました。 Unable to find the default constructor on type MainMenuFragment.これMainMenuFragmentは、アプリケーション NavigationDrawerActivity によって使用され、ユーザーがアプリ内の異なるフラグメントを切り替えることができるようにします。

それを解決するためにMainMenuFragment、次のリンク内で説明されているように、デフォルトのコンストラクターをに追加しました。

しかし、将来、 はMainMenuFragmentデフォルトのコンストラクターを使用して初期化され、最初にその navigationDrawer にアクセスしようとすると、次のようにスローされますSystem.NullReferenceException

System.NullReferenceException: Object reference not set to an instance of an object
at MainMenuFragment.UpdateTopFragmentForCurrentMenu (Android.App.Fragment) <0x00018>
at MainMenuFragment.OpenMenu (IMenuType,bool) <0x0006b>
at MainMenuFragment.OnCreate (Android.OS.Bundle) <0x00053>
at Android.App.Fragment.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <0x0005b>
at (wrapper dynamic-method) object.3919a6ec-60c1-49fd-b101-86191363dc45 (intptr,intptr,intptr) <0x00043>

この null 参照例外に直面せずにデフォルトのコンストラクターを実装するにはどうすればよいですか?

4

1 に答える 1

7

あなたは C# 開発者のようにプログラミングしています。それが問題です :) 私はモノドロイドを学習するのと同じハードルに直面しました。

そこにある例を見てください.Javaでは、ほとんどの場合、object.NewInstance()which returnsのような静的メソッドを使用して初期化されていることがわかりますobject。これは、ビュー/レシーバー/フラグメントを初期化する方法です。その時点で、Arguments プロパティにデータを入力し、それをフラグメントに格納します。空のコンストラクターを除くすべてのコンストラクターを削除し、引数を使用してデータを渡す必要があります。コンストラクターと通常の oo の概念を使用してこれを行おうとすると、大変なことになります。Arguments.putExtra とそれらすべてのメソッドがあります。少し冗長になりますが、コツをつかめば、いくつかのヘルパー メソッドなどの作成を開始できます。

それを整理したら、アクティビティが再開されるたびにフラグメントを再作成する必要があるかどうかを判断する必要があります。そうでない場合は、それらをマークし、RetainInstance = trueすべての状態を保持するのに役立つフラグメントマネージャーに取得します。

以前にAndroidでビルドしたことがない場合、それは奇妙であり、確かに私が期待したものではありません. しかし、それは本当にクールで、私が予想していたよりもはるかに素晴らしいです. Xamarin でも同じです。

よく似た質問:新しい Android フラグメントをインスタンス化するためのベスト プラクティス

于 2013-10-11T22:52:22.003 に答える