0

ディープ コール スタックを介してコンテキストを渡すことなく、非コンテキスト クラスからリソースにアクセスする必要があります。

このトピックに関するすべての回答を既に読みましたが、このクラスは から作成されたものではなくActivity、実際にはかけ離れています。すべての呼び出しでコンテキストを送信する方法は、バリアントではありません。コンテキストについて何かを知る必要のない多くのクラスとメソッドを介して送信する必要があるためです。

非常に深い呼び出しスタックを介してコンテキストを渡さずにリソースにアクセスする機会はありますか? 必要な静的メソッドはありますか? アプリケーションのどこからでも簡単かつ自然な方法でアプリケーションのリソースを取得することが不可能であるとしたら、それは本当に素晴らしいことです。

4

1 に答える 1

1

AndroidのApplicationクラスを拡張し、それをシングルトンとして実装して、グローバルに利用できるようにすることができます。

public class SampleApplication extends Application {
    private static SampleApplication INSTANCE;

    @Override
    public void onCreate() {
        super.onCreate();
        INSTANCE = this;
    }

    public static SampleApplication instance() {
        return INSTANCE;
    }
}

これを行う場合は、AndroidManifest.xmlでいくつかの作業が必要です。これにより、デフォルトのアプリケーションではなくアプリケーションをロードするようにフレームワークに指示されます。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.yourdomain"
  android:versionCode="1"
  android:versionName="1.0">

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"
    android:name=".SampleApplication">
    <activity android:name=".SampleActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

これにより、必要なときにいつでもアプリケーションコンテキストを取得するメカニズムが簡単に得られます。リソースを返す静的メソッドを実装することもできますが、以下は機能するはずです。

SampleApplication.instance().getResources();

これを試したかどうかはわかりませんが、機能するはずです。私はこのコードをテストしなかったので、多少の調整が必要になるかもしれませんが、あなたはその考えを理解する必要があります。

于 2012-10-05T04:01:21.410 に答える