我刚开始Android Development
。现在,我想制作一个enumeration
。枚举中的每个枚举对象,我想为其指定一个名称。我想从我的项目资源(res/values/strings.xml
)中获取该名称。
但是从枚举类型中,我无法调用getResources().getString(R.string.string_name)
。
这是因为枚举不会扩展某项活动吗?
我怎样才能从资源中获取字符串?
谢谢!
P.S。枚举不嵌套在类中。如果可能的话,我想把它作为一个单独的文件保存。
答案 0 :(得分:1)
getResources().getString()
只是getActivity().getResources().getString()
的缩写。
所以getResources()
仍然依赖于上下文(活动,片段,上下文等)。
为了解决这个问题,我亲自扩展了Application类并提供了一个公共静态Context,因此无论您是在活动中还是在POJO中,您都可以随时访问整个应用程序中的资源等。 / p>
示例:
public class MyApp extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
有了这个,你总是可以打电话:
MyApp.context.getResources().getString(xxxx);
答案 1 :(得分:0)
枚举器是隐式静态的。就像在创建它们时一样,您的活动及其背景无处可寻。如果没有Context,也没有资源。
也许你想要使用的是一个带有自定义构造函数而不是枚举器的静态类。例如:
private static class MyConstants {
private Resources mResources;
public String constant1;
public String constant2;
public String constant3;
public MyConstants(Context ctx) {
mResources = ctx.getResources();
constant1 = mResources.getString(R.id.string1);
constant2 = mResources.getString(R.id.string2);
constant3 = mResources.getString(R.id.string3);
}
}
MyConstants mConstants;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book);
mConstants = new MyConstants(this);
Log.e(TAG, mConstants.constant1);
...
}