開始アクティビティ(例:アクティビティ1のBookクラス)で変数を作成し、実際に渡すことなく、アプリケーションのどこでも(例:アクティビティ3、4、5のBookクラス)利用できるようにすることは可能ですか?
私のxmlハンドラーは一連のオブジェクトを作成するので、オブジェクトに変更が加えられた後にxmlファイルも更新するので質問しています。
静的変数を作成できます。適切なアクセス権(たとえば)で宣言されている限りpublic
、同じプロセス内のすべてのアクティビティで直接利用できます。(これがデフォルトになります。アクティビティを別のプロセスに取り込むには、追加の作業を行う必要があります。)
このようなグローバル変数を別のクラスに分離するのが一般的です。
ただし、アプリがバックグラウンドにプッシュされると、プロセスが強制終了されて再作成される可能性があることに注意してください。その場合、静的変数に格納されているデータはすべて失われます。代替手段には、SharedPreferences、データベース、またはContentProviderの使用が含まれます。
たとえば、Applicationを拡張するGlobalVariablesという名前のクラスを実装します。
public class GlobalVariables extends Application
AndroidManifest.xmlで、アプリケーションタグでこれを行います。
<application android:label="@string/YourAppName" android:icon="@drawable/YourIcon"
android:name=".activities.GlobalVariables.">
クラスを宣言するためのパッケージパスを忘れないでください(マニフェストファイルにアクティビティを追加する場合と同様です)。
次に、アプリケーションのどこからでもこのクラスとその変数またはメソッドにアクセスできます。任意のアクティビティのonCreateメソッドでこれを行います。
GlobalVariables globalVariables = (GlobalVariables) getApplicationContext();
アプリケーションから拡張されたクラス(ここではGlobalVariablesなど)は、アプリの起動時に作成され、アプリが破棄されるまで利用できます。
GlobalVariablesクラスには、HashMapなど、必要な変数を格納できるものを含めることができます。最初のアクティビティからGlovalVariablesに変数をプッシュし、2番目のトラフから変数をプルしてインスタンスをGlobalVariablesに取得します。このように(もう一度):
GlobalVariables globalVariables = (GlobalVariables) getApplicationContext();