私はAndroidいくつかのアクティビティを持つアプリケーションに取り組んでいます。その中にいくつかの静的メソッドを持つクラスがあります。異なるアクティビティからこれらのメソッドを呼び出すことができます。 m静的メソッドを使用して、XmlResourceParserを介してxmlファイルからデータをロードするXmlResourceParserを作成するには、アプリケーションコンテキストでの呼び出しが必要です。 ?各アクティビティで取得して渡しますか?何らかの方法でグローバル変数に保存しますか?
より良い方法は、Activityオブジェクトをパラメーターとして静的関数に渡すことです。
私の知る限り、静的メソッドでアプリケーションのコンテキストを提供するようなメソッドはありません。
これが常に機能するかどうかはわかりませんが、今はうまく機能しています。
public class myActivity extends ListActivity
{
public static Context baseContext;
public void onCreate(Bundle savedInstanceState)
{
baseContext = getBaseContext();
}
次に、パッケージで静的を使用できます。
myApplication.baseContext
これにより、どこからでもapplicationContext
にアクセスできるようになり、applicationContext
を使用できる任意の場所から取得できるようになります。 Toast
、getString()
、sharedPreferences
など。これを使用して、静的メソッド内でapplicationContext
を複数回取得しました。
シングルトン:
_package com.domain.packagename;
import Android.content.Context;
/**
* Created by Versa on 10.09.15.
*/
public class ApplicationContextSingleton {
private static PrefsContextSingleton mInstance;
private Context context;
public static ApplicationContextSingleton getInstance() {
if (mInstance == null) mInstance = getSync();
return mInstance;
}
private static synchronized ApplicationContextSingleton getSync() {
if (mInstance == null) mInstance = new PrefsContextSingleton();
return mInstance;
}
public void initialize(Context context) {
this.context = context;
}
public Context getApplicationContext() {
return context;
}
}
_
Application
サブクラスでシングルトンを初期化します。
_package com.domain.packagename;
import Android.app.Application;
/**
* Created by Versa on 25.08.15.
*/
public class mApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ApplicationContextSingleton.getInstance().initialize(this);
}
}
_
私が間違っていない場合、これはすべての場所でapplicationContextへのフックを提供し、ApplicationContextSingleton.getInstance.getApplicationContext();
を使用して呼び出します。アプリケーションを閉じるとき、これをクリアする必要はありません.
_AndroidManifest.xml
_を更新して、このApplication
サブクラスを使用することを忘れないでください:
_<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.domain.packagename"
>
<application
Android:allowBackup="true"
Android:name=".mApplication" <!-- This is the important line -->
Android:label="@string/app_name"
Android:theme="@style/AppTheme"
Android:icon="@drawable/app_icon"
>
_
ここで何かおかしいと思ったら教えてください、ありがとう。 :)
Sane Tricks For InsaneWorldブログに回答があります。 Applicationオブジェクトを独自のサブクラスに置き換えて、そこにアプリのコンテキストを静的に保持できると書かれています。サンプルコードは投稿にあります。
元のブログ投稿- http://uquery.blogspot.co.il/2011/08/how-to-get-application-context.html