如何在不违反基本 OOD 原则的情况下使用 Android 的 getString()?
我需要使用 getString()我的应用程序中的大部分模块。
但由于某种奇怪的原因,它与应用程序或上下文相关< /a>,这意味着我需要将应用程序引用作为参数传递给应用程序中的每个类。
这显然违反了面向对象设计的最基本原则之一。
有办法解决这个问题吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
“奇怪的原因”是,由于字符串资源与您的应用程序绑定在一起,因此如果没有某种句柄(上下文),就无法访问它们。如果大多数不是活动的类需要访问字符串资源,您可能需要重新考虑一下您的设计。不依赖
Context
的一个简单方法是加载字符串并将它们传递给构造函数中的类。The 'strange reason' is that since the string resources are tied to your application, there is no way to access them without some sort of handle to it (the Context). If most of your classes that are not activities need to access string resources, you might want to rethink your design a bit. A simple way to not depend on a
Context
is to load the strings and pass them to your classes in the constructor.是的,有一个解决方法 - 如果您碰巧(或可以)将 View(任何 View 派生类)传递给构造函数,并将其分配给数据成员,那么您可以从类中的任何位置访问字符串资源:
否则,您必须将 Context 传递给需要访问这些字符串资源的每个类。
Yes, there is a workaround - if you happen to (or can) pass a View (any View-derived class) to the constructor, and you assign it to a data member, then you can access the string resources from anywhere in your class:
Otherwise, you will have to pass a Context to every class that needs access to these string resources.
您可以扩展
android.app.Application
类来创建一个静态方法,以在应用程序中的所有类之间传递上下文。请参阅: PhoneApp.java
you can extend
android.app.Application
class to create a static method to pass on the context across all classes in your application.Refer : PhoneApp.java