web-dev-qa-db-ja.com

Androidの静的メソッドにアプリケーションコンテキストを取得する最良の方法

私はAndroidいくつかのアクティビティを持つアプリケーションに取り組んでいます。その中にいくつかの静的メソッドを持つクラスがあります。異なるアクティビティからこれらのメソッドを呼び出すことができます。 m静的メソッドを使用して、XmlResourceParserを介してxmlファイルからデータをロードするXmlResourceParserを作成するには、アプリケーションコンテキストでの呼び出しが必要です。 ?各アクティビティで取得して渡しますか?何らかの方法でグローバル変数に保存しますか?

31
Slapout

より良い方法は、Activityオブジェクトをパラメーターとして静的関数に渡すことです。

私の知る限り、静的メソッドでアプリケーションのコンテキストを提供するようなメソッドはありません。

23
Karan

これが常に機能するかどうかはわかりませんが、今はうまく機能しています。

public class myActivity extends ListActivity
{
    public static Context baseContext;

    public void onCreate(Bundle savedInstanceState) 
    {
        baseContext = getBaseContext();
    }

次に、パッケージで静的を使用できます。

myApplication.baseContext
3
gjpc

これにより、どこからでもapplicationContextにアクセスできるようになり、applicationContextを使用できる任意の場所から取得できるようになります。 ToastgetString()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"
    >
_

ここで何かおかしいと思ったら教えてください、ありがとう。 :)

2
Versa

Sane Tricks For InsaneWorldブログに回答があります。 Applicationオブジェクトを独自のサブクラスに置き換えて、そこにアプリのコンテキストを静的に保持できると書かれています。サンプルコードは投稿にあります。

元のブログ投稿- http://uquery.blogspot.co.il/2011/08/how-to-get-application-context.html

1
Tom Susel