[英]Getting resources from non-activity classes
我有一個特殊的類,用於保存靜態信息並根據特殊情況進行計算。 這是一個特殊的自定義類,它不會擴展活動或android環境的任何部分。
因為此類從未真正實例化 ,所以通常在static
級別上對其進行引用。 對於我來說,這仍然很重要,因為我擁有許多對應用程序流程至關重要的static
enums
。
問題出在這里:因為該類沒有延長android活動的生命周期,所以我在引用應用程序資源文件中的任何字符串值時遇到了麻煩。 (我將字符串存儲在自定義XML文件中作為特殊資源)
這是所有內容的外觀:
枚舉的自定義類:
public class CreepIDs {
public static Context context = App.getContext();
public static enum CreepId {
ROBODEE(0, resourceString(R.creeps.robodee));
public final int id;
public final String name;
CreepId(int id, String name){
this.id = id;
this.name = name;
};
};
public static String resourceString(int id){
return context.getResources().getString(id);
}
}
應用程序類別擴展應用程序:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
}
public static Context getContext(){
return mContext;
}
}
到目前為止,我已經使用調試功能逐步完成了該應用程序,並且App.getContext()
始終返回 一個值為 null
的 Context
。 我不知道為什么。 我需要能夠從不擴展android生命周期任何部分的類中引用 R.creeps.robodee
。
我將通過構造函數傳遞上下文,但是由於CreepId
是static enum
CreepIDs
實際上並未實例化。 我僅從主要活動中引用它。
您認為這里最好的解決方案是什么?
這樣雖然不漂亮,但是我找到了解決方案。 在Main活動的onCreate
(此信息現在甚至被使用的唯一位置)中,我放置了以下代碼:
CreepIDs.context = getApplicationContext();
由於context
無論如何都是static public
,因此我會在應用啟動時直接為其分配一個值。 我只需要上下文,因此我可以調用資源,並且它不會用於其他任何事情,因此我認為這對我來說根本不是問題。
最后,使用特殊的App
類對我不起作用。
感謝大家的協助。
嘗試這個:
public class App extends Application {
private static App INSTANCE;
@Override
public void onCreate() {
super.onCreate();
INSTANCE = this;
}
public static App getInstance() {
return INSTANCE;
}
}
對我有用。
基於Andrey的答案:
public class App extends Application {
private static App INSTANCE;
@Override
public void onCreate() {
super.onCreate();
INSTANCE = this;
}
public static App getInstance() {
return INSTANCE;
}
}
然后,在CreepsID中:
public class CreepIDs {
public static Context context = App.getInstance();
public static enum CreepId {
ROBODEE(0, resourceString(R.creeps.robodee));
public final int id;
public final String name;
CreepId(int id, String name){
this.id = id;
this.name = name;
};
};
public static String resourceString(int id){
return context.getResources().getString(id);
}
}
您正在調用靜態方法來獲取App的上下文,從而使您的靜態類可以訪問Activity的資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.