2011-08-12 3 views
4

私のアプリケーションではほとんどのモジュールのgetString()を使用する必要があります。基本的なOOD原則に違反することなくAndroidのgetString()を使用するには?

しかし、いくつかの奇妙な理由で、それはtied to Application or Contextです。つまり、アプリケーションの各クラス、アプリケーション参照をパラメータとして渡す必要があります。

これは明らかにviolatesオブジェクト指向設計の最も基本的な原則の1つです。

方法はありますか?

+0

"アプリケーション内のすべてのクラス、つまりApplicationオブジェクトをパラメータとして渡す必要があります。" - オブジェクトに '参照'を渡す 'オブジェクト'を渡すことはありません。あなたが正しい方法でアプローチしないと、これはいくつかの有害な影響を及ぼしますが、オブジェクトへの参照を渡すという概念が「オブジェクト指向設計の最も基本的な原則の1つに明確に違反している」ということを理解していません。他のオブジェクトのメソッドにパラメータとしてオブジェクトへの参照を渡さないと、OOPは存在しません。 – Squonk

+0

ああ、オブジェクト指向設計(OOD、実際にはOOPと同じではない)の最も基本的な原則の1つに違反していると思われる理由を説明するために、引用を引用してください。 – Squonk

+1

http://stackoverflow.com/questions/2993817/is-it-a-good-practice-to-create-a-reference-to-application-context-and-use-it-any – ateiob

答えて

4

はい、回避策はあり - あなたは、その後に起こる(または缶)コンストラクタにビュー(任意のビューの派生クラス)を渡し、あなたはデータメンバに割り当てた場合あなたは、クラス内のどこからでも文字列リソースにアクセスすることができます。

String str_via_res = yourView.getContext().getString(R.string.str_via_res); 

そうでなければ、あなたはこれらの文字列リソースへのアクセスを必要とするすべてのクラスにコンテキストを渡す必要があります。

+0

ありがとう!私のクラスはすでにいくつかのビューを持っているので、あなたのヒントは実際にはとてもうまく動作します。 +1 – ateiob

+0

FYI:この方法ではまだメモリがリークしています。ビューは、アクティビティ全体、つまりアクティビティが保持しているものすべてを参照します。 http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html –

6

「奇妙な理由」は、文字列リソースがアプリケーションに結びついているため、何らかの処理(コンテキスト)なしでアクセスする方法がないことです。アクティビティではないクラスのほとんどが文字列リソースにアクセスする必要がある場合は、少し考え直すことをお勧めします。 Contextに依存しない簡単な方法は、文字列をロードしてコンストラクタのクラスに渡すことです。

+1

+1 ** **あなたのデザインをちょっと考えてみてください** – Squonk

2

クラスを拡張すると、アプリケーションのすべてのクラスでコンテキストを渡す静的メソッドを作成できます。

参照してください:PhoneApp.java

関連する問題