工具類 ArabicUtilities 中調用 getResources() 報錯,因非 Activity/Context 子類無此方法。解決:通過構造函數或方法參數傳入 Context(推薦 Application Context)。
public class ArabicUtilities extends Activity { // ❌ 不應繼承 Activity
public void addTranslate(int rid, TextView txt) {
String text = getResources().getString(rid); // 依賴 this context
...
}
}
public class ArabicUtilities { // 普通類
public void addTranslate(int rid, TextView txt, Context context) {
String text = context.getResources().getString(rid); // ✅ 使用傳入 context
txt.setText(reshapeSentence(text));
}
}
// Activity 中調用
arabicUtil.addTranslate(R.string.xxx, textView, getApplicationContext());
public class ArabicUtilities {
private Context context;
public ArabicUtilities(Context context) {
this.context = context.getApplicationContext(); // 持有 Application Context 防洩漏
}
public void addTranslate(int rid, TextView txt) {
String text = context.getResources().getString(rid);
...
}
}
// 使用
ArabicUtilities util = new ArabicUtilities(this); // Activity 中
util.addTranslate(R.string.xxx, textView);
getApplicationContext() 避免生命周期綁定導致洩漏。依賴注入 Context,工具類輕鬆訪問資源系統。