【问题标题】:How to use Android's getString() without violating basic OOD principles?如何在不违反基本 OOD 原则的情况下使用 Android 的 getString()?
【发布时间】:2011-10-25 11:56:35
【问题描述】:

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

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

这显然violates 是面向对象设计的最基本原则之一。

有没有办法解决这个问题?

【问题讨论】:

  • “我需要将 Application 对象作为参数传递给我的应用程序中的每个类。” - 您不会传递“对象”,而是将“引用”传递给对象。虽然如果您不以正确的方式处理它可能会产生一些不利影响,但我不明白将引用传递给对象的概念“显然违反了面向对象设计的最基本原则之一”。如果我们不将对象的引用作为参数传递给其他对象的方法,那么 OOP 将不存在。
  • 哦,请引用一个参考来解释为什么您认为它违反了面向对象设计(OOD,实际上与 OOP 不同)的最基本原则之一。

标签: android android-context


【解决方案1】:

“奇怪的原因”是,由于字符串资源与您的应用程序相关联,如果没有某种句柄(上下文),就无法访​​问它们。如果您的大多数非活动类都需要访问字符串资源,您可能需要重新考虑一下您的设计。不依赖Context 的一种简单方法是加载字符串并将它们传递给构造函数中的类。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢!您的提示实际上对我很有效,因为我所有的课程都已经有了一些看法。 +1
    • 仅供参考:使用此方法仍会泄漏内存。视图“对整个活动有参考,因此对你的活动所持有的任何东西都有参考”。 android-developers.blogspot.com/2009/01/…
    【解决方案3】:

    您可以扩展 android.app.Application 类以创建一个静态方法,以便在应用程序中的所有类之间传递上下文。

    参考:PhoneApp.java

    【讨论】:

      猜你喜欢
      • 2012-09-15
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多