首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 非 Activity 類獲取 Resources:構造函數或方法參數傳遞 Context

     編輯:程式設計綜合問答

工具類 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
        ...
    }
}

修正方案一:方法參數傳 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());

修正方案二:構造函數注入 Context

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);

核心原則

  • 工具類不要繼承 Activity,純粹持有 Context 引用。
  • 優先用 getApplicationContext() 避免生命周期綁定導致洩漏。
  • 若需訪問 Assets/Resources/包名等,Context 必不可少。

依賴注入 Context,工具類輕鬆訪問資源系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved