2012-01-13 19 views
7

静的関数でrecourceを取得する必要がある場合は、何らかの理由でコンテキストまたは静的変数を通じてコン​​テキストを渡す必要があります。しかしなぜが必要ですか?リソースのIDは、静的な環境で到達可能なです(例:R.string.some_my_stuff)。システムリソースが必要な場合は、Resources.getSystem().getString(android.string.some_common_stuff)からも表示されます。しかし、なぜアプリケーションリソースを取得するために何かをすることはできませんか?リソースファイルは、ソースの通常の静的な部分です。リソースはスタティックはアプリケーションにに属します。アプリケーションのクラスは同じ方法でそれに属しています。は静的な方法で静的な部分にアクセスできます。静的な方法でリソースにアクセスできないのはなぜですか?

すべてのアプリケーションで同じ静的な方法でリソースを使用することはできません。なぜなら、最も自然なのですが、代わりにインスタンスを通じてアクセスする必要があります。

私は恐れている、私は非常に重要なことを理解していない。

私はそれをやり直すことはできません。私はそれを知っています。なぜ、説明するか、私に道を見せてください...それだけで私の悲しみから私を治すでしょう:-)ありがとう。

+1

あなたのリソースはアプリケーションに属します。これはコンテキストです。あなたができることは、シングルトンであるアプリケーションクラスを持ち、そこからリソースにアクセスすることです。また、どんなコンテキストにもアクセスできない場所でリソースが必要となるのはなぜですか? – njzk2

+1

懸念活動/ビューによってロードされていないリソースを取得することはできません。 – adatapost

+0

@njzk。 1.私が手を差し伸べることは、私がそれに手を伸ばすことを意味する必要はありません。 2.アクティビティの静的な最終的なvar定義では、コンテキストに到達することはできませんが、ここで行うのは自然なものです。 – Gangnus

答えて

3

リソースIDはアプリケーションごとに一意であり、すべてのアプリケーション(Androidシステムを含む)で一意ではありません。例えば。同じID(例:42)を持つ異なるアプリケーションに2つの異なる文字列が存在する可能性があります。 したがって、1つのアプリケーションに静的にしかアクセスできません(すべてのプログラマーがそのAndroidシステムに同意する必要があります常にインストールされます)。他のすべてのアプリケーションでは、アクセスするアプリケーションのリソースをシステムに伝える必要があります。コンテキストを使用してこれを行います。

+0

+1。あなたのメッセージの第2部分には面白い考えがあります。しかし、IMHO、それは答えではありません。アクティビティーのインスタンス・コンテキストは、アプリケーション・リソースにアクセスできます。アプリケーション内のすべてのアクティビティに対して正しいです。しかし、そのクラスもアプリケーションに属しています。アクティビティのインスタンスだけがリソースを参照し、アクティビティのクラスは表示しないのはなぜですか? **はAndroidシステムに属していません**。 – Gangnus

+0

クラス内の静的情報はコンパイル時に生成されます。しかし、その時点で一意のIDを保証することはできないため、コンパイル時にアプリケーションのIDを指定することはできません。 (アプリケーションの起動時に生成される)コンテキストによって表されるアプリケーションのインスタンスだけが、この時点でAndroidシステムによって生成された一意のIDを与えます。静的なアクセスを与えるために、ランチャーはコードを修正する必要がありました。 – Stefan

+0

上記のコメントでは、「コンパイル時間」を「クラスローディング時間」に置き換えます。これは、クラスローダーが情報を注入できることを意味します。しかし、それはしません。 – Stefan

関連する問題