我需要使用应用程序中大多数模块的getString()。
但由于一些奇怪的原因,它是tied to Application or Context,所以这意味着我需要传递给我的应用程序中的每个类,将Application引用作为参数。
这明确violates面向对象设计的最基本原则之一。
有解决方法吗?
答案 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
类来创建一个静态方法来传递应用程序中所有类的上下文。