我希望在我的Android应用程序中有一个帮助程序类,如Convert或Utils.我遇到的典型问题是:
public class Convert {
private Convert() {
// I can't be instantiated
}
public static int pxToDp(float pixels) {
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, pixels, displayMetrics);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的失败当然是因为Convert不知道getResources()是什么.这让我有两个选择:
子类应用程序,修改我的清单,然后创建一个引用,如下所示:
public class App extends Application {
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext() {
return mContext;
}
}
Run Code Online (Sandbox Code Playgroud)然后App.getContext()到处都需要它.
问题:这不可能是正确的,优雅的方式是什么?
如果你对应用程序显然有用,那么你可能最终会遇到一个巨大的,可怕的课程,它会完成一大堆与之无关的东西 - 对单一责任原则的粗暴对待.
是的,将Context传递给实用程序类有点麻烦和烦人,但这意味着您可以为每种类型的实用程序创建类(例如StringUtils或其他),并至少将责任分开.
我建议不要在任何地方使用App.getContext,因为这意味着所有的实用程序类都将依赖于App,这使得重用它们变得很困难.如果传入上下文,则可以更轻松地重用其他应用程序中的某些实用程序类.
所以我会说使用单独的类,并将该Context传递给方法.这有点难看,但在我看来,比其他选择更难看.
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |