如何使用Android getString()而不违反基本的OOP原则?

时间:2011-08-12 03:02:21

标签: android android-context

我需要使用应用程序中大多数模块的getString()

但由于一些奇怪的原因,它是tied to Application or Context,所以这意味着我需要传递给我的应用程序中的每个类,将Application引用作为参数。

这明确violates面向对象设计的最基本原则之一。

有解决方法吗?

3 个答案:

答案 0 :(得分:6)

“奇怪的原因”是因为字符串资源与应用程序绑定在一起,所以如果没有某种处理方式(Context),就无法访​​问它们。如果您的大多数非活动类需要访问字符串资源,您可能需要重新考虑一下您的设计。不依赖于Context的简单方法是加载字符串并将它们传递给构造函数中的类。

答案 1 :(得分:4)

是的,有一种解决方法 - 如果您碰巧(或可以)将View(任何View派生类)传递给构造函数,并将其分配给数据成员,那么您可以从任何地方访问字符串资源在你班上:

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

否则,您必须将Context传递给需要访问这些字符串资源的每个类。

答案 2 :(得分:2)

你可以扩展android.app.Application类来创建一个静态方法来传递应用程序中所有类的上下文。

参考:PhoneApp.java